veilletech.fr
24 oct. Feed du jour
#03 SÉCURITÉ Faille

Ruby 4.0.9 : les bugs de regex derrière GitLab

Une regex bâtie sur une saisie, c'est du code écrit par autrui.

Ruby 4.0.9, 3.4.12 et 3.3.13 corrigent trois bugs d'Onigmo, le moteur de regex, à l'origine des quatre failles critiques GitLab corrigées depuis le 23 septembre. Toute application qui compile une regex à partir d'un texte contrôlé par un attaquant est concernée ; Regexp.timeout ne protège pas, et Ruby n'a pas demandé de CVE, donc les scanners risquent de ne rien voir.

3 min de lectureintermédiairevidéo 1:15
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Le mécanisme
  3. Ce qui ne marche pas, et ce qu'on ne verra pas
  4. Comment s'y prendre
  5. À retenir

Ce qui se passe

Le 23 octobre 2026, Ruby a publié 4.0.9, 3.4.12 et 3.3.13. Elles corrigent trois bugs d'Onigmo, le moteur d'expressions régulières du langage. Ces bugs sont la cause commune des quatre failles critiques que GitLab a corrigées entre le 23 septembre et le 21 octobre, chaque fois en livrant un Ruby patché.

Date Faille Compte requis Note
23 septembre deux failles oui 9,9
12 octobre CVE-2026-97229 non 10,0
21 octobre CVE-2026-110264 non 10,0

CVE-2026-110264 touche toutes les versions de GitLab depuis la 7.0 ; c'est la faille de la fiche du 22 octobre, corrigée par le correctif 19.5.1. Un chercheur au pseudonyme joaxcar a signalé les quatre par le programme de primes de GitLab. Au 23 octobre, aucune d'elles ne figurait au catalogue KEV de la CISA.

Le mécanisme

GitLab compile des motifs fournis par ses utilisateurs, par exemple ceux de la configuration CI/CD. Un motif forgé corrompt la mémoire pendant la compilation par Ruby, ce qui peut conduire à exécuter du code sur le serveur.

Ruby précise que le problème dépasse GitLab : une application est concernée quand elle compile une regex à partir d'une chaîne contrôlée par un attaquant, avec Regexp.new, Regexp.union, Regexp.compile ou une interpolation dans un motif.

Ruby
Regexp.new(params[:q])      # concerné : le motif vient du visiteur
/#{params[:filtre]}/        # concerné : interpolation d'une saisie
/\A\d{4}\z/                 # sans risque : motif écrit par le développeur

Ce qui ne marche pas, et ce qu'on ne verra pas

Comment s'y prendre

  1. Passer à 4.0.9, 3.4.12 ou 3.3.13. La 4.0.8 ne contient pas le correctif de CVE-2026-110264 ; les 3.4.12 et 3.3.13 sont les premières de leur série à en porter. Ruby 3.2 et antérieur ne sera pas corrigé : la 3.2 est en fin de vie depuis le 1er avril 2026 (3.2.11 en dernière version).

  2. Chercher dans le code les endroits où une saisie alimente un motif. Ces deux recherches donnent des pistes à trier :

    Terminal
    grep -rnE 'Regexp\.(new|union|compile)' app lib
    grep -rnF '/#{' app lib
  3. Sans mise à jour possible, cesser de compiler des regex depuis une entrée non fiable.

  4. GitLab auto-hébergé : GitLab embarque son propre Ruby, donc installer la version qui corrige CVE-2026-110264 suffit : 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 ou 18.11.13. GitLab.com est déjà à jour. GitLab publie aussi des règles de détection (onigmo_native_worker_crash) pour repérer des tentatives.

Source : The Hacker News, 23 octobre 2026. Source en anglais. Compléments cités par l'article : avis de Ruby, correctifs GitLab 19.5.1.