Seguridad y privacidad

Ruby corrige errores en el motor de expresiones regulares detrás de vulnerabilidades críticas de ejecución remota de código en GitLab

Ruby lanza actualizaciones para corregir tres errores en el motor Onigmo que habilitaron cuatro vulnerabilidades críticas de ejecución remota de código en GitLab, afectando a cualquier aplicación que compile patrones de expresiones regulares no confiables.

Una lupa inspeccionando un hilo rojo enredado sobre un plano, revelando una grieta.
Ilustración generada para este artículo

Traducido automáticamente del original en inglés.

Ruby ha lanzado las versiones 4.0.9, 3.4.12 y 3.3.13 para abordar tres errores en su motor integrado de expresiones regulares, Onigmo. Estos defectos subyacentes fueron responsables de cuatro vulnerabilidades críticas de ejecución remota de código parcheadas recientemente en GitLab. Las correcciones son urgentes para cualquier desarrollador que mantenga aplicaciones Ruby que procesen cadenas de patrones proporcionadas por usuarios.

Qué ocurrió

Los problemas de seguridad se originaron en cómo Ruby compila expresiones regulares a partir de texto controlado por un atacante. Cuando un programa pasa dicha cadena a métodos como Regexp.new, Regexp.union o Regexp.compile, o utiliza interpolación en un patrón como /#{input}/, el motor puede corromper la memoria durante la compilación. Esta corrupción de memoria crea una vía para la ejecución arbitraria de código en el servidor. Aunque GitLab fue la principal víctima identificada públicamente, Ruby establece explícitamente que cualquier aplicación que realice esta operación es vulnerable.

GitLab descubrió estas fallas a través de su programa de recompensas por errores (bug bounty), con el investigador joaxcar reportando los cuatro casos. La empresa emitió cuatro identificadores Common Vulnerabilities and Exposures (CVE) entre el 23 de septiembre y el 21 de octubre. Las dos primeras vulnerabilidades, divulgadas a finales de septiembre, requerían una cuenta iniciada sesión y tenían una calificación de severidad de 9.9 sobre 10. Las dos siguientes, CVE-2026-97229 y CVE-2026-110264, no requerían autenticación y recibieron la puntuación máxima de severidad de 10.0. Cabe destacar que CVE-2026-110264 afecta a todas las versiones de GitLab desde la 7.0 en adelante.

Ruby aún no ha asignado sus propios identificadores CVE para estas correcciones, aconsejando a los usuarios seguir el problema a través de los registros de GitLab. Esta decisión crea una brecha de visibilidad para los escáneres de seguridad que dependen de la coincidencia de CVEs con versiones específicas de bibliotecas, ya que los registros de GitLab solo listan a GitLab como producto afectado. Ruby señaló que ha asignado CVEs para errores similares en 2022 y 2024, pero actualmente describe los patrones no confiables en su documentación principalmente como un riesgo de denegación de servicio (DoS) en lugar de una amenaza de ejecución de código.

Cómo funciona

La vulnerabilidad reside en Onigmo, el motor de expresiones regulares incrustado dentro del lenguaje Ruby. Cuando Ruby compila una expresión regular, traduce la cadena de patrón a una estructura interna utilizada para la coincidencia. Si un atacante suministra un patrón especialmente diseñado, el proceso de compilación puede provocar corrupción de memoria. Esto no es un problema de coincidencia lenta o agotamiento de recursos, que son preocupaciones típicas con regex complejas. En cambio, el motor falla al manejar ciertas estructuras de patrones de forma segura durante la fase de construcción, permitiendo a un atacante sobrescribir ubicaciones de memoria.

Las estrategias comunes de mitigación a menudo fallan contra esta clase específica de error. Establecer Regexp.timeout no previene la corrupción de memoria porque el error ocurre durante la compilación, antes de que comience la coincidencia. De manera similar, limitar la longitud de la cadena de entrada del patrón no es fiable porque patrones cortos y cuidadosamente construidos pueden seguir activando los defectos subyacentes del motor. La única defensa fiable es evitar por completo la compilación de expresiones regulares a partir de entradas no confiables o actualizar a una versión parcheada del runtime de Ruby.

Detalles clave

  • Las versiones de Ruby 4.0.9, 3.4.12 y 3.3.13 contienen las correcciones necesarias para los tres errores del motor Onigmo.
  • Ruby 4.0.8 es insuficiente ya que carece de la corrección para CVE-2026-110264; los usuarios deben actualizar a 4.0.9.
  • Ruby 3.2 y versiones anteriores no recibirán correcciones, ya que Ruby 3.2 llegó al final de su vida útil el 1 de abril de 2026.
  • Las aplicaciones solo están en riesgo si compilan regex a partir de cadenas controladas por atacantes mediante Regexp.new, Regexp.union, Regexp.compile o interpolación.
  • GitLab corrigió los problemas en las versiones 19.5.1, 19.4.3, 19.3.6, 19.2.9, 19.1.9, 19.0.10 y 18.11.13.
  • A fecha del 23 de octubre, ninguno de los cuatro CVE asociados aparecía en el catálogo de Vulnerabilidades Explotadas Conocidas de CISA.

Por qué importa

Para los ingenieros de software, este incidente destaca un peligro persistente en el manejo de la entrada de usuario para el coincidente dinámico de patrones. Muchos desarrolladores asumen que los riesgos de regex se limitan a la degradación del rendimiento o ataques de denegación de servicio. Este evento demuestra que los problemas de seguridad de memoria en la fase de compilación pueden conducir a la ejecución remota completa de código. Obliga a reevaluar cualquier función que permita a los usuarios definir filtros de búsqueda, reglas de validación o patrones de configuración utilizando expresiones regulares.

La falta de CVEs dedicados de Ruby también complica la monitorización automatizada de seguridad. Los equipos que dependen de escáneres de vulnerabilidades estándar podrían pasar por alto estos parches si sus herramientas solo verifican CVEs asociados directamente con el paquete del lenguaje Ruby. Dado que GitLab incluye su propia copia de Ruby, las instancias auto-gestionadas deben actualizar la aplicación GitLab misma para recibir la corrección. Esta cadena de dependencia significa que los líderes de infraestructura deben rastrear las actualizaciones del lenguaje upstream incluso cuando aparecen como parches a nivel de aplicación en servicios incluidos.

Qué puedes hacer

  • Actualiza Ruby a la versión 4.0.9, 3.4.12 o 3.3.13 inmediatamente si tu aplicación compila regex a partir de la entrada del usuario.
  • Migra fuera de Ruby 3.2 y versiones anteriores, ya que estas versiones no recibirán correcciones de seguridad para estos errores.
  • Audita tu base de código en busca de usos de Regexp.new, Regexp.union, Regexp.compile o interpolación de patrones con datos no confiables.
  • Refactoriza funciones que permitan patrones de regex definidos por el usuario para usar alternativas más seguras, como opciones de filtro predefinidas o coincidencia de cadenas.
  • Si gestionas instancias de GitLab auto-hospedadas, actualiza a una de las versiones parcheadas, como 19.5.1 o 18.11.13.
  • Implementa las reglas de detección proporcionadas por GitLab para monitorear señales de intentos de explotación en tus servidores.
  • #ruby
  • #security
  • #gitlab
  • #vulnerability
  • #regex

Herramientas de la Tienda de Bytechap

Seguir leyendo

Todos los artículos