Alerte critique · Ruby et GitLab
Ruby Regexp : quatre failles critiques révélées par GitLab.
Une expression régulière piégée corrompt la mémoire de Ruby au moment où elle est compilée, jusqu'à l'exécution de code sur le serveur. GitLab est touché, comme toute application Ruby qui compile un motif fourni par un utilisateur. Voici comment savoir si vous êtes concerné, et comment corriger.
Mis à jour le 23 octobre 2026 · Sources : ruby-lang.org, GitLab
L'essentiel en 60 secondes
Le danger est dans Regexp.new.
Seules les applications qui compilent une expression régulière à partir d'un texte contrôlé par un attaquant sont exposées.
Regexp.timeout ne protège pas.
Ni le délai de Ruby ni une limite de longueur du motif n'arrêtent ces bugs : ils frappent pendant la compilation.
GitLab : mettez à jour l'instance.
GitLab embarque son propre Ruby. Sur une instance auto-hébergée, c'est le paquet GitLab qu'il faut mettre à jour.
Ce qui se passe
Quatre bugs mémoire dans la compilation des expressions régulières
Numérotés et notés par GitLab, qui les a corrigés dans son produit avant que Ruby ne publie ses propres versions.
| CVE | Le bug | Accès requis | CVSS | GitLab corrigé dans |
|---|---|---|---|---|
| CVE-2026-89078 | Double libération de mémoire dans l'analyseur de motifs | Un compte GitLab | 9,9 | 19.4.1 · 23/09/2026 |
| CVE-2026-93577 | Dépassement d'entier dans le compilateur de motifs | Un compte GitLab | 9,9 | 19.4.1 · 23/09/2026 |
| CVE-2026-97229 | Dépassement d'entier dans le compilateur, via la configuration CI/CD | Aucun | 10,0 | 19.4.2 · 12/10/2026 |
| CVE-2026-110264 | Dépassement d'entier dans le compilateur de motifs. Touche GitLab 7.0 à 19.5 | Aucun | 10,0 | 19.5.1 · 21/10/2026 |
L'équipe Ruby n'a pas encore demandé ses propres CVE pour ces correctifs, et dit pouvoir y revenir.
Qui est concerné
Votre branche de Ruby, et ce qu'il faut faire
Le support de chaque branche vient du calendrier officiel de ruby-lang.org.
| Branche | Corrigé dans | Support officiel | À faire |
|---|---|---|---|
| 4.0 | 4.0.9 | Maintenance normale | Mettre à jour vers 4.0.9 |
| 3.4 | 3.4.12 | Maintenance normale | Mettre à jour vers 3.4.12 |
| 3.3 | 3.3.13 | Sécurité seule → 31/03/2027 | Mettre à jour vers 3.3.13, une version publiée à titre exceptionnel |
| 3.2 et avant | aucune | Fin depuis le 01/04/2026 | Migrer vers 3.3 au minimum, idéalement 3.4 ou 4.0 |
Ruby 3.2 n'aura pas de correctif
Vérifier en 2 minutes
Regardez à trois endroits : la version, le code et GitLab
La version dit si Ruby est corrigé. Le code dit si l'application compile des motifs venus de l'extérieur.
$ cat .ruby-version
$ grep -A1 'RUBY VERSION' Gemfile.lock
$ ruby -v
$ grep -rnE 'Regexp\.(new|compile)|/#\{' app lib
$ sudo gitlab-rake gitlab:env:info | grep -i version
Ce que LibWatch fait pour vous
La version de Ruby de chaque dépôt, revérifiée chaque nuit.
- Lit la version de Ruby épinglée dans chaque dépôt : .ruby-version, Gemfile.lock, .tool-versions ou mise.
- Signale quand une version plus récente de la branche existe, et quand la branche n'est plus supportée, comme Ruby 3.2.
- Revérifie tout chaque nuit, même les projets auxquels personne ne touche.
Sa limite : LibWatch ne rattache pas encore ces CVE au moteur Ruby et ne surveille pas la version de votre instance GitLab. Vérifiez aussi ruby -v en production.
Votre code reste chez vous : LibWatch lit vos fichiers de dépendances et ne garde que la liste de vos paquets. Comment ça marche →
Corriger
Trois étapes, la deuxième est celle qu'on oublie
Seule la mise à jour de Ruby corrige les quatre failles.
Mettre à jour Ruby, puis reconstruire vos images
Changez aussi .ruby-version et la ligne ruby du Gemfile, puis mettez à jour le Gemfile.lock.
$ rbenv install 3.4.12 && rbenv local 3.4.12
$ bundle update --ruby
$ docker build --pull --no-cache -t mon-app:corrigee .
Redémarrer tous les processus Ruby
Puma, Sidekiq, Solid Queue… Un processus lancé avant la mise à jour tourne encore avec l'ancien Ruby.
$ ps -eo pid,lstart,cmd | grep -E 'puma|sidekiq|solid'
GitLab auto-hébergé : mettre à jour le paquet
Vers 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 ou 18.11.13. Mettre à jour le Ruby du système ne corrige pas celui de GitLab.
$ sudo apt update && sudo apt install gitlab-ee
# édition Community : gitlab-ce
En attendant
Si vous ne pouvez pas mettre à jour tout de suite
Protège
Ne plus compiler de motif venu d'un utilisateur
- — Pour chercher un texte, String#include? suffit : aucun motif n'est compilé.
- — Pour un filtre, proposez une liste de motifs prédéfinis plutôt qu'un champ libre.
# au lieu de
lignes.grep(Regexp.new(params[:q]))
# préférez
lignes.select { _1.include?(params[:q]) }
Ne protège pas
Ce qui ne protège pas
- — Regexp.timeout : les bugs frappent pendant la compilation, avant toute exécution.
- — Limiter la longueur du motif : pas fiable, selon l'équipe Ruby.
Seule la mise à jour corrige
Chronologie
Un mois, de la première CVE au correctif de Ruby
23/09/2026
GitLab 19.4.1
Deux premières CVE corrigées, notées 9,9.
12/10/2026
GitLab 19.4.2
Une faille CI/CD exploitable sans compte, notée 10.
21/10/2026
GitLab 19.5.1
La dernière CVE, de GitLab 7.0 à 19.5, notée 10.
23/10/2026
Ruby 4.0.9, 3.4.12, 3.3.13
Les correctifs arrivent dans Ruby, pour toutes les applications.
Questions fréquentes