Alerta crítica · Ruby y GitLab

  • CVSS hasta 10
  • Ejecución remota de código
  • Corregido el 23/10/2026

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

Leer con una IA Versión .md

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.

CVEEl falloAcceso necesarioCVSSGitLab 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.

RamaCorregido enSoporte oficialQué 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

Su fin de soporte fue el 1 de abril de 2026: ya no recibe ninguna versión corregida, ni para estas vulnerabilidades ni para las siguientes.

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.

La versión de Ruby
$ cat .ruby-version
$ grep -A1 'RUBY VERSION' Gemfile.lock
$ ruby -v
Los patrones compilados al vuelo
$ grep -rnE 'Regexp\.(new|compile)|/#\{' app lib
Tu instancia de GitLab
$ 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, Bundler y Docker
$ 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.

Comprobar
$ 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.

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

El equipo de Ruby recomienda 4.0.9, 3.4.12, 3.3.13 o una versión más reciente.

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

Lo que nos preguntan desde el 23 de octubre

¿Afecta a mi aplicación Rails?
Solo si compila una expresión regular a partir de un texto que controla un usuario: Regexp.new(params[…]) o una interpolación en un literal. Busca esos patrones en tu código y actualiza Ruby de todos modos.
¿Por qué las CVE vienen de GitLab y no de Ruby?
Las vulnerabilidades las comunicó joaxcar al programa de bug bounty de GitLab. GitLab las numeró, las puntuó y las corrigió en su producto antes de que Ruby publicara sus propias versiones. El equipo de Ruby aún no ha solicitado sus propias CVE para estas correcciones y dice que podría hacerlo más adelante.
¿No basta con Regexp.timeout?
No. Los fallos actúan durante la compilación del patrón, antes de cualquier ejecución: ni el plazo de Ruby ni un límite de longitud del patrón los detienen. Solo corrige actualizar a 4.0.9, 3.4.12, 3.3.13 o una versión más reciente.
¿Necesita LibWatch acceder a mi código?
No. LibWatch lee tus archivos de dependencias y solo guarda la lista de tus paquetes. 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.