El lenguaje de programación Ruby ha lanzado recientemente las versiones 4.0.9, 3.4.12 y 3.3.13 con el objetivo de corregir tres errores en Onigmo, el motor de expresiones regulares integrado en el lenguaje. Estos errores son responsables de cuatro vulnerabilidades críticas de seguridad que GitLab ha parcheado en el transcurso del último mes. La importancia de estas actualizaciones radica en que afectan a cualquier aplicación que construya expresiones regulares a partir de texto controlado por un atacante, y no se limitan únicamente a la plataforma de GitLab.
GitLab identificó que un patrón especialmente diseñado podía corromper la memoria durante el proceso de compilación de Ruby, lo que podría llevar a la ejecución de código en sus propios servidores. Este tipo de vulnerabilidad (CVE-2026-110264, entre otras) resalta la necesidad urgente de que los desarrolladores y administradores de sistemas revisen cómo manejan las expresiones regulares en sus aplicaciones para evitar que sean víctimas de ataques.
En su aviso, Ruby especificó que se considera afectada cualquier aplicación que compila una expresión regular a partir de una cadena de texto controlada por un atacante. Esto ocurre cuando un programa pasa dicha cadena a métodos como `Regexp.new`, `Regexp.union` o `Regexp.compile`, o cuando se utiliza interpolación para incluirla dentro de un patrón, como en `/#{input}/`. Las aplicaciones que solo utilizan expresiones regulares escritas por sus propios desarrolladores no están en riesgo.
Las versiones 4.0.9, 3.4.12 y 3.3.13 de Ruby corrigen los fallos de seguridad mencionados. Las versiones 3.4.12 y 3.3.13 son las primeras de sus respectivas series en incluir alguna de las tres correcciones. Es relevante mencionar que una versión anterior, la 4.0.8, no incluye la solución para una de las vulnerabilidades, específicamente CVE-2026-110264, por lo que los usuarios de Ruby 4.0 deberían actualizar a la versión 4.0.9. Por otro lado, Ruby 3.2 y versiones anteriores no recibirán parches, ya que Ruby 3.2 alcanzó su fin de vida el 1 de abril de 2026, siendo la versión 3.2.11 la última publicada. Ruby recomienda encarecidamente a los usuarios que migren a la versión 3.4 o 4.0.
Para aquellos que no puedan realizar la actualización de inmediato, el aviso de Ruby sugiere dejar de compilar expresiones regulares a partir de entradas no confiables. Curiosamente, dos defensas que podrían parecer útiles no lo son. Establecer un `Regexp.timeout` no detiene estos errores, y limitar la longitud de un patrón resulta poco fiable, ya que patrones cortos también pueden desencadenar las vulnerabilidades.
GitLab compila expresiones regulares proporcionadas por sus usuarios, como los patrones en una configuración de CI/CD, y descubrió que patrones manipulados podrían corromper la memoria durante su compilación. Entre el 23 de septiembre y el 21 de octubre, GitLab emitió cuatro CVEs, solucionando cada uno mediante el lanzamiento de una versión de Ruby corregida. Los dos primeros CVEs, divulgados el 23 de septiembre, requieren una cuenta de usuario y fueron calificados con un 9.9 sobre 10. Los otros dos, CVE-2026-97229 del 12 de octubre y CVE-2026-110264 del 21 de octubre, no requieren ninguna cuenta y obtuvieron la máxima calificación de 10.0. Es importante señalar que CVE-2026-110264 afecta a todas las versiones de GitLab desde la 7.0 en adelante.
Un investigador que opera bajo el seudónimo de joaxcar reportó los cuatro fallos a través del programa de recompensas por errores de GitLab. Hasta el 23 de octubre, ninguno de estos cuatro CVEs estaba listado en el catálogo de Vulnerabilidades Conocidas y Explotadas de CISA. Ruby no ha solicitado identificadores CVE propios para estas correcciones "al menos por ahora", y ha indicado a los usuarios que sigan los problemas utilizando los cuatro números CVE de GitLab.
Esta situación genera un vacío para aquellos que escanean por CVE. Los registros de CVE de GitLab solo nombran a GitLab como el producto afectado, lo que significa que un escáner que verifique esos registros contra versiones de Ruby instaladas no tendrá coincidencias. Ruby ha tratado este tipo de errores como vulnerabilidades en el pasado, asignando números CVE a las correcciones en 2022 y 2024, a pesar de que durante mucho tiempo ha sido inseguro construir expresiones regulares a partir de entradas no confiables. Su documentación sigue describiendo los patrones no confiables únicamente como un riesgo de denegación de servicio. Ruby ha afirmado que actualizará su aviso si solicita algún identificador CVE.
Para los casos de instancias autogestionadas de GitLab, es crucial contar con la versión que corrige CVE-2026-110264. GitLab la lanzó el 21 de octubre y ha retroportado la corrección hasta la versión 18.11.13. GitLab.com ya opera la versión corregida, y los inquilinos de GitLab Dedicated en lanzamientos internos recientes no necesitan tomar ninguna medida, dado que GitLab incluye su propia copia de Ruby y la ha parcheado allí, lo que implica que la instalación de cualquiera de estas versiones corregidas aplica la solución.
Además, GitLab ha publicado reglas de detección que los administradores autogestionados pueden utilizar para buscar señales de intentos de explotación, lo que subraya la importancia de estar alerta y actuar proactivamente ante posibles amenazas de seguridad.
