
RCE no GitHub via injeção de opção push X-Stat
Somente para fins educacionais e de pesquisa de segurança autorizada.
Não use contra qualquer sistema sem permissão explícita por escrito.
CVE-2026-3854 é uma vulnerabilidade de execução remota de código no pipeline de push git do GitHub Enterprise Server (e do GitHub.com).
Quando um cliente fornece opções de push (git push -o), o código Ruby interno do GitHub constrói um cabeçalho X-Stat concatenando cada valor de opção com ponto e vírgula como delimitadores de campo. Como os valores eram inseridos verbatim (sem sanitização), um atacante poderia incorporar ponto e vírgula em uma opção de push para injetar pares chave-valor arbitrários no cabeçalho e sobrescrever configurações críticas de segurança — alcançando, em última instância, RCE sem sandbox como o usuário git.
X-Stat: repo_id=12345;user_id=alice;rails_env=production;...;push_option_0=<USER INPUT>
Injetar normal_value;rails_env=staging como o valor da opção de push resulta em:
...;push_option_0=normal_value;rails_env=staging
O parser considera a última ocorrência de cada chave, então rails_env agora é staging (sem sandbox), sobrescrevendo o valor legítimo production definido anteriormente.
list[str] / dict[str, str])python3 exploi-git.py
O script executa três demonstrações consecutivas inteiramente em memória — sem conexões de rede, sem comandos shell, sem gravações de arquivos:
| Demonstração | O que mostra |
|---|---|
| 1 | Injeção básica de ponto e vírgula sobrescrevendo rails_env |
| 2 | Cadeia conceitual completa de RCE em 3 etapas |
| 3 | Comportamento corrigido — ponto e vírgula são codificados em percentual e a injeção é neutralizada |
O GitHub corrigiu a vulnerabilidade codificando em percentual (percent-encoding) os ponto e vírgula nos valores das opções de push antes de inseri-los no cabeçalho X-Stat:
normal_value;rails_env=staging → normal_value%3Brails_env=staging
Isso torna o ponto e vírgula uma parte literal do valor e quebra a injeção.
Este repositório é fornecido exclusivamente para fins educacionais e para apoiar pesquisa de segurança autorizada. O(s) autor(es) não assume(m) responsabilidade por uso indevido. Sempre obtenha permissão explícita por escrito antes de testar qualquer sistema que você não possua.