Alerta crítica · Ruby y GitLab
Ruby Regexp: cuatro vulnerabilidades críticas reveladas por GitLab.
Una expresión regular manipulada corrompe la memoria de Ruby en el momento de compilarse, hasta permitir la ejecución de código en el servidor. GitLab está afectado, igual que cualquier aplicación Ruby que compile un patrón proporcionado por un usuario. Así puedes saber si te afecta y cómo corregirlo.
Actualizado el 23 de octubre de 2026 · Fuentes: ruby-lang.org, GitLab
Lo esencial en 60 segundos
El peligro está en Regexp.new.
Solo están expuestas las aplicaciones que compilan una expresión regular a partir de un texto controlado por un atacante.
Regexp.timeout no protege.
Ni el plazo de Ruby ni un límite de longitud del patrón detienen estos fallos: actúan durante la compilación.
GitLab: actualiza la instancia.
GitLab incluye su propio Ruby. En una instancia autoalojada, hay que actualizar el paquete de GitLab.
Qué está pasando
Cuatro fallos de memoria en la compilación de expresiones regulares
Numerados y puntuados por GitLab, que los corrigió en su producto antes de que Ruby publicara sus propias versiones.
| CVE | El fallo | Acceso necesario | CVSS | GitLab corregido en |
|---|---|---|---|---|
| CVE-2026-89078 | Doble liberación de memoria en el analizador de patrones | Una cuenta de GitLab | 9,9 | 19.4.1 · 23/09/2026 |
| CVE-2026-93577 | Desbordamiento de entero en el compilador de patrones | Una cuenta de GitLab | 9,9 | 19.4.1 · 23/09/2026 |
| CVE-2026-97229 | Desbordamiento de entero en el compilador, a través de la configuración CI/CD | Ninguno | 10,0 | 19.4.2 · 12/10/2026 |
| CVE-2026-110264 | Desbordamiento de entero en el compilador de patrones. Afecta a GitLab 7.0 a 19.5 | Ninguno | 10,0 | 19.5.1 · 21/10/2026 |
El equipo de Ruby aún no ha solicitado sus propias CVE para estas correcciones y dice que podría hacerlo más adelante.
A quién afecta
Tu rama de Ruby y lo que debes hacer
El soporte de cada rama sale del calendario oficial de ruby-lang.org.
| Rama | Corregido en | Soporte oficial | Qué hacer |
|---|---|---|---|
| 4.0 | 4.0.9 | Mantenimiento normal | Actualizar a 4.0.9 |
| 3.4 | 3.4.12 | Mantenimiento normal | Actualizar a 3.4.12 |
| 3.3 | 3.3.13 | Solo seguridad → 31/03/2027 | Actualizar a 3.3.13, una versión publicada con carácter excepcional |
| 3.2 y anteriores | ninguna | Terminó el 01/04/2026 | Migrar a 3.3 como mínimo, idealmente a 3.4 o 4.0 |
Ruby 3.2 no tendrá corrección
Comprobar en 2 minutos
Mira en tres sitios: la versión, el código y GitLab
La versión dice si Ruby está corregido. El código dice si la aplicación compila patrones procedentes del exterior.
$ 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
Lo que LibWatch hace por ti
La versión de Ruby de cada repositorio, revisada de nuevo cada noche.
- Lee la versión de Ruby fijada en cada repositorio: .ruby-version, Gemfile.lock, .tool-versions o mise.
- Avisa cuando existe una versión más reciente de la rama y cuando la rama ya no tiene soporte, como Ruby 3.2.
- Lo revisa todo de nuevo cada noche, incluso los proyectos que nadie toca.
Su límite: LibWatch todavía no asocia estas CVE al motor de Ruby y no vigila la versión de tu instancia de GitLab. Comprueba también ruby -v en producción.
Tu código se queda en tu casa: LibWatch lee tus archivos de dependencias y solo guarda la lista de tus paquetes. Cómo funciona →
Corregir
Tres pasos, y el segundo es el que se olvida
Solo actualizar Ruby corrige las cuatro vulnerabilidades.
Actualizar Ruby y después reconstruir tus imágenes
Cambia también .ruby-version y la línea ruby del Gemfile, y actualiza después el Gemfile.lock.
$ rbenv install 3.4.12 && rbenv local 3.4.12
$ bundle update --ruby
$ docker build --pull --no-cache -t mon-app:corrigee .
Reiniciar todos los procesos de Ruby
Puma, Sidekiq, Solid Queue… Un proceso lanzado antes de la actualización sigue ejecutándose con el Ruby antiguo.
$ ps -eo pid,lstart,cmd | grep -E 'puma|sidekiq|solid'
GitLab autoalojado: actualizar el paquete
A 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 o 18.11.13. Actualizar el Ruby del sistema no corrige el de GitLab.
$ sudo apt update && sudo apt install gitlab-ee
# edición Community: gitlab-ce
Mientras tanto
Si no puedes actualizar ahora mismo
Protege
Dejar de compilar patrones procedentes de un usuario
- — Para buscar un texto basta con String#include?: no se compila ningún patrón.
- — Para un filtro, ofrece una lista de patrones predefinidos en lugar de un campo libre.
# en lugar de
lignes.grep(Regexp.new(params[:q]))
# prefiere
lignes.select { _1.include?(params[:q]) }
No protege
Lo que no protege
- — Regexp.timeout: los fallos actúan durante la compilación, antes de cualquier ejecución.
- — Limitar la longitud del patrón: no es fiable, según el equipo de Ruby.
Solo actualizar corrige
Cronología
Un mes, de la primera CVE a la corrección de Ruby
23/09/2026
GitLab 19.4.1
Dos primeras CVE corregidas, puntuadas con 9,9.
12/10/2026
GitLab 19.4.2
Una vulnerabilidad de CI/CD explotable sin cuenta, puntuada con 10.
21/10/2026
GitLab 19.5.1
La última CVE, de GitLab 7.0 a 19.5, puntuada con 10.
23/10/2026
Ruby 4.0.9, 3.4.12, 3.3.13
Las correcciones llegan a Ruby, para todas las aplicaciones.
Preguntas frecuentes