
RCE en GitHub vía inyección de la opción push X-Stat
Solo con fines educativos y de investigación de seguridad autorizada.
No lo utilices contra ningún sistema sin permiso explícito por escrito.
CVE-2026-3854 es una vulnerabilidad de ejecución remota de código en el pipeline de git push de GitHub Enterprise Server (y de GitHub.com).
Cuando un cliente proporciona opciones de push (git push -o), el código Ruby interno de GitHub construye una cabecera X-Stat concatenando cada valor de opción con punto y coma como delimitadores de campo. Dado que los valores se insertaban tal cual (sin saneamiento), un atacante podía incrustar punto y coma en una opción de push para inyectar campos arbitrarios clave-valor en la cabecera y sobrescribir ajustes críticos de seguridad — logrando finalmente RCE sin sandbox como el usuario git.
X-Stat: repo_id=12345;user_id=alice;rails_env=production;...;push_option_0=<USER INPUT>
Al inyectar normal_value;rails_env=staging como valor de la opción de push, se convierte en:
...;push_option_0=normal_value;rails_env=staging
El analizador toma la última aparición de cada clave, por lo que rails_env ahora es staging (sin sandbox), sobrescribiendo el valor legítimo production establecido anteriormente.
list[str] / dict[str, str])python3 exploi-git.py
El script ejecuta tres demostraciones consecutivas enteramente en memoria — sin conexiones de red, sin comandos de shell, sin escrituras de archivos:
| Demo | Qué muestra |
|---|---|
| 1 | Inyección básica de punto y coma que sobrescribe rails_env |
| 2 | Cadena conceptual completa de RCE en 3 pasos |
| 3 | Comportamiento parcheado — el punto y coma se codifica con porcentaje y la inyección queda neutralizada |
GitHub corrigió la vulnerabilidad codificando con porcentaje los punto y coma en los valores de las opciones de push antes de insertarlos en la cabecera X-Stat:
normal_value;rails_env=staging → normal_value%3Brails_env=staging
Esto convierte el punto y coma en una parte literal del valor y neutraliza la inyección.
Este repositorio se proporciona únicamente con fines educativos y para apoyar la investigación de seguridad autorizada. El/los autor(es) no asume(n) ninguna responsabilidad por el mal uso. Obtén siempre permiso explícito por escrito antes de realizar pruebas contra cualquier sistema que no poseas.