
El investigador de seguridad de DepthFirst, Yuhang Wu, ha publicado un exploit de prueba de concepto (PoC) funcional que ejecuta comandos como git en un servidor GitLab 18.11.3 autoadministrado y sin parches.
Un usuario autenticado normal se activaría al enviar dos cuadernos Jupyter diseñados y solicitar sus diferencias. El encadenamiento no requiere privilegios administrativos, acceso al corredor de integración continua (CI), interacción con la víctima ni acceso al proyecto de otro usuario.
El exploit público es específico de las compilaciones de GitLab 18.11.3 en x86-64. Los errores fundamentales en Oj afectan las versiones más amplias. Los rangos afectados son GitLab Community Edition (CE) y Enterprise Edition (EE) 15.2.0 – 18.10.7, 18.11.0 – 18.11.4 y 19.0.0 – 19.0.1.
Las primeras versiones de corrección son 18.10.8, 18.11.5 y 19.0.2. Oj es un analizador JSON de alto rendimiento para Ruby con importante código C nativo.
Las gemas disponibles públicamente 3.13.0 a 3.17.1 son vulnerables. 3.17.3 es la primera versión pública que incluye ambas correcciones. Esta falla afecta a Free, Premium y Ultimate. Ruby en sí no se ve afectado.
La explotación exitosa se ejecutará como git. Su alcance efectivo depende del aislamiento de la implementación, pero puede incluir código fuente, secretos de Rails, credenciales de servicio, datos de CI/CD y servicios internos accesibles desde su aplicación. GitLab.com fue parcheado el 10 de junio.
Los clientes leales no necesitan hacer nada. Los operadores autogestionados deben migrar a una versión compatible que incluya la solución. Los usuarios de Helm y Operador deben verificar la versión de GitLab en la imagen del servicio web, así como las versiones del gráfico y del Operador. Depth First dijo que no tenía conocimiento de ningún abuso en el campo hasta el 24 de julio.
Ni la divulgación de DepthFirst ni las notas de la versión de GitLab del 10 de junio enumeran identificadores CVE o puntuaciones CVSS para los dos errores encadenados. Ninguno de los dos proporciona una solución temporal. Ambos dirigen a los operadores autogestionados a actualizar.
Hacker News preguntó a GitLab sobre el estado, la clasificación y la evidencia de abuso de CVE. También hicimos preguntas profundas sobre la portabilidad del exploit y si existen mitigaciones temporales compatibles. Respuesta pendiente. DepthFirst enumera 9 CVE para otras fallas del DO encontradas en la misma revisión.

El renderizador de portátiles de GitLab pasa el JSON .ipynb controlado por el repositorio a Oj::Parser.usual.parse en el trabajador Puma de larga duración. Esto envía datos del cuaderno controlado por el atacante al estado del analizador nativo de Oj dentro del proceso de solicitud de GitLab.
El análisis técnico de DepthFirst muestra cómo un error controla los punteros de devolución de llamada y otro filtra las direcciones del montón necesarias para refinar las búsquedas de aleatorización del diseño del espacio de direcciones (ASLR).
Oj almacena el estado anidado en una pila fija de 1024 bytes, pero nunca comprueba si la profundidad excede esa cantidad. Por lo tanto, las matrices profundamente anidadas pueden escribir 0x01 bytes en el estado del analizador adyacente. El exploit corrompe buf.head y hace que Oj pase un puntero interno falsificado a realloc(). Las asignaciones posteriores de matrices Ruby reutilizan los mismos 3584 bytes de espacio jemalloc y sobrescriben p->start.
Oj asigna una clave de objeto de 65.565 bytes, trunca su longitud a 29 en un campo firmado de 16 bits y devuelve 29 bytes que contienen un puntero de asignación de clave en vivo. GitLab incorpora ese puntero en la diferencia del cuaderno renderizado, proporcionando al exploit la fuga de dirección necesaria para limitar la búsqueda de ASLR. En una instalación de GitLab 18.11.3 con dos trabajadores perfilados, las búsquedas normalmente tomaban entre 5 y 10 minutos. Los investigadores estimaron entre 1 y 2 horas para la gama más amplia de trabajadores maduros.
Dos archivos de cuaderno ordenados léxicamente en una solicitud diffs_stream mantienen ambas etapas dentro del mismo trabajador Puma y reutilizan el analizador Oj de proceso global. El primer archivo interrumpe la devolución de llamada y genera un error que GitLab detecta antes de continuar con la diferencia. En el siguiente análisis, se llama al puntero sobrescrito y llega al sistema() a través de una secuencia de gadget específica de la compilación.
Para la demostración pública, empaquetamos la cadena en un laboratorio local de GitLab 18.11.3 x86-64 y volvemos a conectar el trabajador Puma como git.
DepthFirst informó el error de Oj el 21 de mayo y el responsable del mantenimiento fusionó la solución el 27 de mayo. DO 3.17.3 enviado el 4 de junio. Los investigadores informaron a la cadena GitLab el 5 de junio. DepthFirst dijo que GitLab lo confirmó el 8 de junio.
Según DepthFirst, GitLab lanzó una versión corregida el 10 de junio y resolvió el informe el 17 de julio. Según una revisión de The Hacker News, GitLab enumera el aumento de Oj 3.17.3 en correcciones de errores en lugar de en la tabla de correcciones de seguridad, y no analiza las cadenas delta RCE de portátiles.
Source link
