{"id":1759,"date":"2026-07-25T10:15:34","date_gmt":"2026-07-25T10:15:34","guid":{"rendered":"https:\/\/cybercolombia.co\/index.php\/2026\/07\/25\/investigador-publica-gitlab-rce-poc-que-permite-a-usuarios-autenticados-ejecutar-comandos-como-git-cyberdefensa-mx\/"},"modified":"2026-07-25T10:15:34","modified_gmt":"2026-07-25T10:15:34","slug":"investigador-publica-gitlab-rce-poc-que-permite-a-usuarios-autenticados-ejecutar-comandos-como-git-cyberdefensa-mx","status":"publish","type":"post","link":"https:\/\/cybercolombia.co\/index.php\/2026\/07\/25\/investigador-publica-gitlab-rce-poc-que-permite-a-usuarios-autenticados-ejecutar-comandos-como-git-cyberdefensa-mx\/","title":{"rendered":"Investigador publica GitLab RCE PoC que permite a usuarios autenticados ejecutar comandos como Git \u2013 CYBERDEFENSA.MX"},"content":{"rendered":"<div id=\"articlebody\">\n<p>El investigador de seguridad Yuhang Wu en Depthfirst ha publicado un exploit de prueba de concepto (PoC) funcional que ejecuta comandos como <code>git<\/code> en un GitLab autoadministrado sin parches <code>18.11.3<\/code> servidor.<\/p>\n<p>Un usuario autenticado normal lo activa confirmando dos cuadernos Jupyter dise\u00f1ados y solicitando su diferencia. La cadena no necesita derechos de administrador, acceso al corredor de integraci\u00f3n continua (CI), interacci\u00f3n con la v\u00edctima ni acceso al proyecto de otro usuario.<\/p>\n<p>El exploit p\u00fablico es espec\u00edfico de GitLab. <code>18.11.3<\/code> en x86-64; los errores subyacentes de Oj afectan versiones m\u00e1s amplias. Las gamas afectadas son GitLab Community Edition (CE) y Enterprise Edition (EE). <code>15.2.0<\/code> a trav\u00e9s de <code>18.10.7<\/code>, <code>18.11.0<\/code> a trav\u00e9s de <code>18.11.4<\/code>y <code>19.0.0<\/code> a trav\u00e9s de <code>19.0.1<\/code>.<\/p>\n<p>Las primeras versiones fijas son <code>18.10.8<\/code>, <code>18.11.5<\/code>y <code>19.0.2<\/code>. Oj es un analizador JSON de alto rendimiento para Ruby con importante c\u00f3digo C nativo.<\/p>\n<p>Gemas publicadas <code>3.13.0<\/code> a trav\u00e9s de <code>3.17.1<\/code> son vulnerables; <code>3.17.3<\/code> es la primera versi\u00f3n publicada que contiene ambas correcciones. Las fallas afectan a Free, Premium y Ultimate. Ruby en s\u00ed no se ve afectado.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/ai-vuln-protection-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Ciberseguridad\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjQl2axNwsfhbXOFynrg_uAZsvHi3OvNGSA8KJO-BKR8Xm3x7yjKV3EvfY4v5mwXx6LF0uWFb9h9d9iAV_Pi-YYhqimX9wx4OaLdDJEdR215Xrxq_PAtXkaLfQso4pTSjbj6fvh_ZTliLpzWZSZfcoZgyXtKwhN-SSDDlmbtUqGLshc0KqYQGWYHMN52Sl1\/s728-e100\/zz-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>La explotaci\u00f3n exitosa se ejecuta como <code>git<\/code>. Su alcance efectivo depende del aislamiento de la implementaci\u00f3n, pero puede incluir c\u00f3digo fuente, secretos de Rails, credenciales de servicio, datos de CI\/CD y servicios internos accesibles desde la aplicaci\u00f3n. GitLab.com fue parcheado el 10 de junio.<\/p>\n<p>Los clientes dedicados no necesitan ninguna acci\u00f3n. Los operadores autogestionados deben pasar a una versi\u00f3n compatible que contenga la soluci\u00f3n. Los usuarios de Helm y Operador deben verificar la versi\u00f3n de GitLab dentro de la imagen del servicio web, no solo el gr\u00e1fico o la versi\u00f3n del Operador. Depthfirst dijo que no ten\u00eda conocimiento de explotaci\u00f3n en estado salvaje hasta el 24 de julio.<\/p>\n<p>Ni el <a href=\"https:\/\/depthfirst.com\/gitlab-rce-oj-spill\" target=\"_blank\">primera revelaci\u00f3n en profundidad<\/a> ni las notas de la versi\u00f3n de GitLab del 10 de junio enumeran identificadores CVE o puntuaciones CVSS para los dos errores de la cadena. Ninguno de los dos proporciona una soluci\u00f3n temporal; ambos dirigen a los operadores autogestionados a actualizarse.<\/p>\n<p>Hacker News ha preguntado a GitLab sobre el estado, la clasificaci\u00f3n y la evidencia de explotaci\u00f3n de CVE. Tambi\u00e9n pregunt\u00f3 en profundidad sobre la portabilidad de los exploits y si existe una mitigaci\u00f3n temporal compatible. Las respuestas est\u00e1n pendientes. Depthfirst enumera nueve CVE para otras fallas del DO encontradas en la misma revisi\u00f3n.<\/p>\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiiKTyaaLkhwstQr3NKKNz65EvIXQgyvfFLQ-FJU7bXyQu8z40Wjm_CNFPnYSNqUOqYXgT0ClkMj-FG-E1KYhlD5y0NOUUTo8Z3s7YECp1045Gm3MqxsXVckEbtGCAw_94koZXNPhNmlz6aQ5VTTTxfpNMIai4APKbZNYUQrsQpXdLvdoosjhWRauoy1GQ\/s1700-e365\/git-exploited.png\" style=\"display: block;  text-align: center; clear: left; float: left;\"><img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiiKTyaaLkhwstQr3NKKNz65EvIXQgyvfFLQ-FJU7bXyQu8z40Wjm_CNFPnYSNqUOqYXgT0ClkMj-FG-E1KYhlD5y0NOUUTo8Z3s7YECp1045Gm3MqxsXVckEbtGCAw_94koZXNPhNmlz6aQ5VTTTxfpNMIai4APKbZNYUQrsQpXdLvdoosjhWRauoy1GQ\/s1700-e365\/git-exploited.png\" alt=\"\" border=\"0\" data-original-height=\"1570\" data-original-width=\"3016\"\/><\/a><\/div>\n<p>El renderizador de port\u00e1tiles de GitLab pasa controlado por el repositorio <code>.ipynb<\/code> JSON a <code>Oj::Parser.usual.parse<\/code> Dentro de un longevo trabajador de Puma. Eso env\u00eda datos del cuaderno controlado por el atacante al estado de analizador nativo de Oj dentro del proceso de solicitud de GitLab.<\/p>\n<p>profundidad primero <a href=\"https:\/\/depthfirst.com\/research\/going-depthfirst-achieving-gitlab-rce-via-two-ruby-memory-corruption-vulnerabilities\" target=\"_blank\">an\u00e1lisis t\u00e9cnico<\/a> muestra c\u00f3mo un error controla un puntero de devoluci\u00f3n de llamada, mientras que el otro filtra una direcci\u00f3n de mont\u00f3n necesaria para limitar la b\u00fasqueda de aleatorizaci\u00f3n del dise\u00f1o del espacio de direcciones (ASLR).<\/p>\n<p>Oj almacena el estado de anidamiento en una pila fija de 1024 bytes, pero nunca comprueba si la profundidad la excede. Por lo tanto, los arreglos profundamente anidados pueden escribir <code>0x01<\/code> bytes en el estado del analizador adyacente. El exploit corrompe <code>buf.head<\/code>lo que hace que Oj pase un puntero interior falsificado a <code>realloc()<\/code>. Una asignaci\u00f3n posterior de Ruby Array recupera la misma regi\u00f3n jemalloc de 3584 bytes y sobrescribe <code>p-&gt;start<\/code>.<\/p>\n<p>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 el puntero de asignaci\u00f3n de claves en vivo. GitLab lleva ese puntero a la diferencia del cuaderno renderizado, d\u00e1ndole al exploit la fuga de direcci\u00f3n necesaria para limitar la b\u00fasqueda de ASLR. En el GitLab perfilado de dos trabajadores <code>18.11.3<\/code> instalaci\u00f3n, la b\u00fasqueda sol\u00eda tardar entre cinco y diez minutos. Los investigadores proyectaron de una a dos horas en el rango m\u00e1s amplio de trabajadores maduros.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thn.news\/sygnia-webinar\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Ciberseguridad\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEh3-o9La7DYm6jz5qcavVBLvRXUoQLqwrMmrvB529PbUxdg7TJZS3BMjVi4D7vd6V9vlSf_OX48mmXQWPgah_SPITaGgg4AP9YxB2AH-63YeWU39N3DXadwc_2zjIpTwCt0iyTdPZIM-KzKhDf_JDPWDGu3IbYfi1ilQE8Ly29HiKYagSIur-il4k7MMNv8\/s728-e100\/sygnia-d-3.png\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>Dos archivos de cuaderno ordenados l\u00e9xicamente en uno <code>diffs_stream<\/code> La solicitud mantiene ambas etapas dentro del mismo trabajador Puma, que reutiliza el analizador Oj de proceso global. El primer archivo corrompe la devoluci\u00f3n de llamada y genera un error que GitLab detecta antes de continuar con la diferencia. El siguiente an\u00e1lisis invoca el puntero sobrescrito y llega <code>system()<\/code> a trav\u00e9s de una secuencia de gadgets espec\u00edfica de la construcci\u00f3n.<\/p>\n<p>El <a href=\"https:\/\/github.com\/wupco\/gitlab-rce-demo\/tree\/main\" target=\"_blank\">manifestaci\u00f3n p\u00fablica<\/a> empaqueta la cadena en un GitLab local <code>18.11.3<\/code> laboratorio x86-64 y hace que el trabajador de Puma se conecte nuevamente como <code>git<\/code>.<\/p>\n<p>Depth inform\u00f3 por primera vez los errores de Oj el 21 de mayo, y el mantenedor <a href=\"https:\/\/github.com\/ohler55\/oj\/pull\/1014\" target=\"_blank\">fusion\u00f3 las correcciones<\/a> el 27 de mayo. <a href=\"https:\/\/github.com\/ohler55\/oj\/releases\/tag\/v3.17.3\" target=\"_blank\">DO <code>3.17.3<\/code><\/a>  enviado el 4 de junio. Los investigadores informaron sobre la cadena GitLab el 5 de junio; Depthfirst dijo que GitLab lo confirm\u00f3 el 8 de junio.<\/p>\n<p>GitLab <a href=\"https:\/\/docs.gitlab.com\/releases\/patches\/patch-release-gitlab-19-0-2-released\/\" target=\"_blank\">lanz\u00f3 las versiones fijas<\/a> el 10 de junio y resolvi\u00f3 el informe el 17 de julio, seg\u00fan profundidadprimero. Una revisi\u00f3n de The Hacker News encontr\u00f3 que GitLab enumer\u00f3 el DO <code>3.17.3<\/code> aparece debajo de las correcciones de errores en lugar de en la tabla de correcciones de seguridad y no describe la cadena RCE de diferencias del cuaderno.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>El investigador de seguridad Yuhang Wu en Depthfirst ha publicado un exploit de prueba de concepto (PoC) funcional que ejecuta comandos como git en un GitLab autoadministrado sin parches 18.11.3 servidor. Un usuario autenticado normal lo activa confirmando dos cuadernos Jupyter dise\u00f1ados y solicitando su diferencia. La cadena no necesita derechos de administrador, acceso al [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1379,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,5],"tags":[1207,176,86,24,2695,2167,4045,2774,265,2618,823,779,1115],"class_list":["post-1759","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-noticias","category-trending","tag-autenticados","tag-comandos","tag-como","tag-cyberdefensa-mx","tag-ejecutar","tag-git","tag-gitlab","tag-investigador","tag-permite","tag-poc","tag-publica","tag-rce","tag-usuarios"],"_links":{"self":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/posts\/1759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/comments?post=1759"}],"version-history":[{"count":0,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/posts\/1759\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/media\/1379"}],"wp:attachment":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/media?parent=1759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/categories?post=1759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/tags?post=1759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}