Alerte critique · Ruby et GitLab

  • CVSS jusqu'à 10
  • Exécution de code à distance
  • Corrigé le 23/10/2026

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

Lire avec une IA Version .md

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.

CVELe bugAccès requisCVSSGitLab 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.

BrancheCorrigé dansSupport 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

Sa fin de support date du 1er avril 2026 : elle ne reçoit plus aucune version corrigée, ni pour ces failles ni pour les suivantes.

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.

La version de Ruby
$ cat .ruby-version
$ grep -A1 'RUBY VERSION' Gemfile.lock
$ ruby -v
Les motifs compilés à la volée
$ grep -rnE 'Regexp\.(new|compile)|/#\{' app lib
Votre instance GitLab
$ 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, Bundler et Docker
$ 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.

Contrôler
$ 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.

Omnibus (Debian / Ubuntu)
$ 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.
Ruby
# 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

L'équipe Ruby recommande 4.0.9, 3.4.12, 3.3.13 ou plus récent.

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

Ce qu'on nous demande depuis le 23 octobre

Mon application Rails est-elle concernée ?
Seulement si elle compile une expression régulière à partir d'un texte qu'un utilisateur contrôle : Regexp.new(params[…]) ou une interpolation dans un littéral. Cherchez ces motifs dans votre code, et mettez à jour Ruby de toute façon.
Pourquoi les CVE viennent-elles de GitLab et pas de Ruby ?
Les failles ont été signalées par joaxcar au programme de bug bounty de GitLab. GitLab les a numérotées, notées et corrigées dans son produit avant que Ruby ne publie ses propres versions. L'équipe Ruby n'a pas encore demandé ses propres CVE pour ces correctifs, et dit pouvoir y revenir.
Regexp.timeout ne suffit-il pas ?
Non. Les bugs frappent pendant la compilation du motif, avant toute exécution : ni le délai de Ruby ni une limite de longueur du motif ne les arrêtent. Seule la mise à jour vers 4.0.9, 3.4.12, 3.3.13 ou plus récent corrige.
LibWatch a-t-il besoin d'accéder à mon code ?
Non. LibWatch lit vos fichiers de dépendances et ne garde que la liste de vos paquets. 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.