Sécurité et confidentialité

Ruby corrige des bugs du moteur regex à l'origine de failles critiques d'exécution de code à distance dans GitLab

Ruby publie des mises à jour pour corriger trois bugs du moteur Onigmo qui ont permis quatre vulnérabilités critiques d'exécution de code à distance dans GitLab, affectant toute application compilant des motifs regex non fiables.

Une loupe inspectant un fil rouge emmêlé sur un plan technique, révélant une fissure.
Illustration générée pour cet article

Traduit automatiquement depuis l'original anglais.

Ruby a publié les versions 4.0.9, 3.4.12 et 3.3.13 pour corriger trois bugs dans son moteur d'expressions régulières intégré, Onigmo. Ces défauts sous-jacents étaient responsables de quatre vulnérabilités critiques d'exécution de code à distance récemment corrigées dans GitLab. Les correctifs sont urgents pour tout développeur maintenant des applications Ruby qui traitent des chaînes de motifs fournies par l'utilisateur.

Ce qui s'est passé

Les problèmes de sécurité proviennent de la manière dont Ruby compile les expressions régulières à partir de textes contrôlés par un attaquant. Lorsqu'un programme passe une telle chaîne aux méthodes comme Regexp.new, Regexp.union ou Regexp.compile, ou utilise l'interpolation dans un motif comme /#{input}/, le moteur peut corrompre la mémoire lors de la compilation. Cette corruption de la mémoire crée une voie pour l'exécution de code arbitraire sur le serveur. Bien que GitLab ait été la principale victime identifiée publiquement, Ruby indique explicitement que toute application effectuant cette opération est vulnérable.

GitLab a découvert ces failles via son programme de bug bounty, avec le chercheur joaxcar signalant les quatre instances. L'entreprise a émis quatre identifiants Common Vulnerabilities and Exposures (CVE) entre le 23 septembre et le 21 octobre. Les deux premières vulnérabilités, divulguées fin septembre, nécessitaient un compte connecté et portaient une cote de sévérité de 9,9 sur 10. Les deux suivantes, CVE-2026-97229 et CVE-2026-110264, ne nécessitaient aucune authentification et ont reçu le score de sévérité maximal de 10,0. Fait notable, CVE-2026-110264 affecte toutes les versions de GitLab depuis la 7.0.

Ruby n'a pas encore attribué ses propres identifiants CVE à ces correctifs, conseillant aux utilisateurs de suivre le problème via les registres de GitLab à la place. Cette décision crée un manque de visibilité pour les scanners de sécurité qui reposent sur la correspondance des CVE avec des versions spécifiques de bibliothèques, car les registres de GitLab ne listent que GitLab comme produit affecté. Ruby a noté qu'il avait attribué des CVE pour des bugs similaires en 2022 et 2024, mais décrit actuellement les motifs non fiables dans sa documentation principalement comme un risque de déni de service plutôt que comme une menace d'exécution de code.

Comment cela fonctionne

La vulnérabilité réside dans Onigmo, le moteur d'expressions régulières intégré au langage Ruby. Lorsque Ruby compile une expression régulière, il traduit la chaîne de motif en une structure interne utilisée pour la correspondance. Si un attaquant fournit un motif spécialement conçu, le processus de compilation peut déclencher une corruption de la mémoire. Il ne s'agit pas d'un problème de correspondance lente ou d'épuisement des ressources, qui sont des préoccupations typiques avec les regex complexes. Au lieu de cela, le moteur ne gère pas certaines structures de motif de manière sûre pendant la phase de construction, permettant à un attaquant d'écraser des emplacements mémoire.

Les stratégies d'atténuation courantes échouent souvent contre cette classe spécifique de bug. Le réglage de Regexp.timeout n'empêche pas la corruption de la mémoire car l'erreur se produit lors de la compilation, avant le début de la correspondance. De même, limiter la longueur du motif d'entrée n'est pas fiable car des motifs courts, soigneusement construits, peuvent toujours déclencher les défauts sous-jacents du moteur. La seule défense fiable consiste à éviter complètement de compiler des expressions régulières à partir d'entrées non fiables ou à mettre à niveau vers une version corrigée de l'environnement d'exécution Ruby.

Détails clés

  • Les versions Ruby 4.0.9, 3.4.12 et 3.3.13 contiennent les correctifs nécessaires pour les trois bugs du moteur Onigmo.
  • Ruby 4.0.8 est insuffisant car il manque le correctif pour CVE-2026-110264 ; les utilisateurs doivent passer à la 4.0.9.
  • Ruby 3.2 et les versions antérieures ne recevront pas de correctifs, car Ruby 3.2 a atteint la fin de vie le 1er avril 2026.
  • Les applications ne sont à risque que si elles compilent des regex à partir de chaînes contrôlées par un attaquant via Regexp.new, Regexp.union, Regexp.compile ou l'interpolation.
  • GitLab a corrigé les problèmes dans les versions 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 et 18.11.13.
  • Au 23 octobre, aucun des quatre CVE associés n'apparaissait dans le catalogue des vulnérabilités exploitées connues de la CISA.

Pourquoi c'est important

Pour les ingénieurs logiciels, cet incident met en évidence un danger persistant dans la gestion des entrées utilisateur pour la correspondance dynamique de motifs. Beaucoup de développeurs supposent que les risques liés aux regex se limitent à la dégradation des performances ou aux attaques par déni de service. Cet événement prouve que les problèmes de sécurité mémoire dans la phase de compilation peuvent conduire à une exécution complète de code à distance. Cela force une réévaluation de toute fonctionnalité permettant aux utilisateurs de définir des filtres de recherche, des règles de validation ou des motifs de configuration à l'aide d'expressions régulières.

L'absence de CVE Ruby dédiés complique également la surveillance automatisée de la sécurité. Les équipes dépendant de scanners de vulnérabilité standard peuvent manquer ces correctifs si leurs outils ne vérifient que les CVE associés directement au paquet du langage Ruby. Comme GitLab inclut sa propre copie de Ruby, les instances auto-hébergées doivent mettre à jour l'application GitLab elle-même pour recevoir le correctif. Cette chaîne de dépendance signifie que les responsables d'infrastructure doivent suivre les mises à jour du langage en amont, même lorsqu'elles apparaissent comme des correctifs au niveau de l'application dans les services regroupés.

Ce que vous pouvez faire

  • Mettez à niveau Ruby vers la version 4.0.9, 3.4.12 ou 3.3.13 immédiatement si votre application compile des regex à partir d'entrées utilisateur.
  • Migrez loin de Ruby 3.2 et des versions antérieures, car ces versions ne recevront pas de correctifs de sécurité pour ces bugs.
  • Auditez votre base de code pour les utilisations de Regexp.new, Regexp.union, Regexp.compile ou l'interpolation de motifs avec des données non fiables.
  • Refactorisez les fonctionnalités qui permettent des motifs regex définis par l'utilisateur pour utiliser des alternatives plus sûres, telles que des options de filtre prédéfinies ou la correspondance de chaînes.
  • Si vous gérez des instances GitLab auto-hébergées, mettez à niveau vers l'une des versions corrigées, telles que 19.5.1 ou 18.11.13.
  • Implémentez les règles de détection fournies par GitLab pour surveiller les signes de tentatives d'exploitation sur vos serveurs.
  • #ruby
  • #security
  • #gitlab
  • #vulnerability
  • #regex

Outils de la Boutique Bytechap

Continuer la lecture

Tous les articles