# Ruby Regexp: cuatro vulnerabilidades críticas reveladas por GitLab.

Fuente: https://libwatch.com/es/cve/ruby-regexp

Alerta crítica · Ruby y GitLab

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

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.

[Comprobar mis proyectos Ruby](https://app.libwatch.com/users/sign_up?source=cve_ruby_regexp&locale=es)

[Ver los comandos](#verifier)

Actualizado el 23 de octubre de 2026 · Fuentes: ruby-lang.org, GitLab

## Ficha de estado

A 23/10/2026

CVE CVE-2026-89078
CVE-2026-93577
CVE-2026-97229
CVE-2026-110264

Gravedad CVSS 3.1 de 9,9 a 10 · crítica

Impacto Ejecución remota de código en el servidor

Origen Onigmo, el motor de expresiones regulares de Ruby

Ruby corregido 4.0.9 · 3.4.12 · 3.3.13

GitLab corregido 19.5.1 · 19.4.3 · 19.3.6 · 19.2.9
19.1.9 · 19.0.10 · 18.11.13

Descubrimiento joaxcar, programa de bug bounty de 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

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.

[Probar LibWatch 14 días](https://app.libwatch.com/users/sign_up?source=cve_ruby_regexp&locale=es)

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 →](/es/seguridad)

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.

## Fuentes

Verificadas el 23/10/2026.

- [ruby-lang.org · Anuncio del 23/10/2026](https://www.ruby-lang.org/en/news/2026/10/23/regexp-fixes-for-gitlab-cves/)
- [ruby-lang.org · Ramas de Ruby](https://www.ruby-lang.org/en/downloads/branches/)
- [GitLab 19.4.1 · 23/09/2026](https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-4-1-released/)
- [GitLab 19.4.2 · 12/10/2026](https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-4-2-released/)
- [GitLab 19.5.1 · 21/10/2026](https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-5-1-released/)
- [cve.org · 4 fichas](https://www.cve.org/CVERecord?id=CVE-2026-89078)
