Sécurité · 2 novembre 2026

Des moteur de expressions régulières de Ruby sont à l'origine de failles critiques chez GitLab

closeup photography of green and black computer motherboard
Bartosz Kwitkowski / Unsplash

L'équipe de Ruby a publié les versions 4.0.9, 3.4.12 et 3.3.13 pour corriger trois erreurs dans le moteur d'expressions régulières Onigmo. Ces failles peuvent permettre l'exécution de code malveillant sur les serveurs concernés.

Ces erreurs affectent toute application Ruby qui génère des expressions régulières à partir d'entrées externes. Le problème survient lors de la compilation du modèle en programme interne, et non lors de la comparaison avec le texte. Les utilisateurs employant uniquement des modèles écrits par eux-mêmes ne sont pas concernés.

GitLab a été particulièrement touché car le service compile des expressions régulières issues d'entrées d'utilisateurs, notamment via des configurations CI/CD. Le chercheur Johan Carlsson a signalé quatre failles via un programme de primes aux bogues : CVE-2026-89078 et CVE-2026-93577 avec un score CVSS de 9,9, ainsi que CVE-2026-97229 et CVE-2026-110264 avec le score maximal de 10,0. Ces deux dernières sont exploitables sans authentification. GitLab a corrigé ces failles entre le 23 septembre et le 21 octobre en appliquant des correctifs à sa propre version de Ruby. La mise à jour la plus récente concerne toutes les versions de GitLab depuis la version 7.0 de 2014.

L'équipe de Ruby lie ces quatre CVE à trois erreurs distinctes. La CVE-2026-89078 provient d'une double libération de mémoire lors de la lecture d'un modèle. Les CVE-2026-93577 et CVE-2026-97229 résultent d'un dépassement d'entier lors du calcul de la taille du programme compilé. Enfin, la CVE-2026-110264 est due à un dépassement des compteurs internes pour les modèles comportant très nombreuses répétitions.

Les correctifs ne sont pas tous nouveaux. La double libération de mémoire était corrigée depuis mai 2025 dans la branche de développement et présente dans Ruby 4.0.0. Le correctif pour les compteurs a suivi en avril 2026, et celui pour la taille du programme en septembre 2026. Ruby 4.0.8 a intégré le correctif de taille le 22 octobre sans mention de sécurité, suivi de la version 4.0.9 le lendemain pour le dernier correctif. Les branches stables 3.4 et 3.3 ont reçu les trois correctifs simultanément. Ruby 3.3 a reçu cette mise à jour à titre exceptionnel car GitLab a attribué des CVE. Les versions 3.2 et antérieures ne reçoivent plus de mises à jour.

L'exploitation peut mener à l'exécution de code avec les droits du processus Ruby, donnant accès aux bases de données, aux secrets d'environnement et au système de fichiers. Un plantage du processus est également probable, pouvant mener à un déni de service sans authentification. Ni GitLab ni Ruby n'ont signalé d'attaques actives.

L'équipe de Ruby précise que les fonctions de délai d'attente, comme Regexp.timeout, sont inefficaces car elles n'interviennent qu'après la compilation. De même, limiter la longueur des modèles n'est pas une solution fiable. Le projet Ruby n'a pas demandé ses propres identifiants CVE, considérant que la compilation de modèles externes est intrinsèquement risquée et que la vulnérabilité réside dans l'application et non dans l'interpréteur.