
🫖 Ferramenta de descoberta correlacionada a contratos e validação autorizada para Gitea CVE-2026-60004
Uma ferramenta autônoma de descoberta, avaliação e validação correlacionada a contrato para a vulnerabilidade de execução remota de código no Git-hook
diffpatchdo Gitea.
O scanner.py oferece a testadores de penetração, defensores e pesquisadores de segurança uma única ferramenta sem dependências para:
Este projeto é fornecido apenas para testes de segurança autorizados, validação defensiva, pesquisa e educação. Execute os modos ativos somente contra sistemas que você possui ou para os quais tenha permissão escrita explícita de avaliação. Você é responsável por cumprir todas as leis, contratos, regras de engajamento e requisitos de divulgação aplicáveis.
Os autores e colaboradores não são responsáveis por uso indevido, danos, interrupção de serviço, perda de dados ou consequências legais. O PoC ativo executa um comando como o usuário do sistema operacional do Gitea e altera o estado do servidor ao criar um repositório privado. Trate-o como qualquer outra ferramenta de validação de RCE.
O CVE-2026-60004 afeta o fluxo de trabalho diffpatch de repositórios do Gitea. Um usuário com permissão de escrita no repositório pode enviar conteúdo de patch controlado que instala um Git hook em um clone temporário bare compartilhado. A aplicação do patch manipulado duas vezes aciona uma colisão add/add e faz com que o hook seja executado como a conta de serviço do Gitea.
Forgejo e outros forks não são automaticamente classificados como vulneráveis. Sua implementação deve ser revisada de forma independente.
Os modos ativos não aceitam listas de alvos ou curingas.
PATHdiscoverO scanner usa apenas a biblioteca padrão do Python. Nenhum pip install é necessário.
git clone https://github.com/InfoSec-DB/CVE-2026-60004-Gitea-Validator.git
cd CVE-2026-60004-Gitea-Validator
python3 scanner.py --help
python3 scanner.py verify \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/version.json
python3 scanner.py recon \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/recon.json
A detecção de versão é um sinal de avaliação, não uma prova de explorabilidade. Patches retroportados, builds personalizados, proxies reversos e forks podem exigir revisão manual.
Mantenha a senha fora do histórico do shell colocando-a no ambiente para o comando:
GITEA_PASSWORD='substitua-pela-senha-de-teste-aprovada' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
A menos que --yes-i-am-authorized seja fornecido para automação, confirm pede que você digite a frase de confirmação vinculada ao contrato. O comando remoto padrão é id.
Use isso apenas quando a criação de contas for permitida pelas regras de engajamento:
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--register-test-account \
--credential-log evidence/credentials.txt \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
A senha é armazenada apenas no log de credenciais privado, não duplicada nas evidências JSON ou no painel de resultados do terminal.
python3 scanner.py test \
https://gitea.example \
--contract-number ENG-2026-001
🚨 test é um comando de conveniência ativo. Em um alvo afetado com registro habilitado, ele cria automaticamente uma conta e um repositório privado, escreve o marcador do contrato, executa id e salva os resultados em afterdark-results/. Ele intencionalmente não possui prompt interativo adicional, portanto invocá-lo é o reconhecimento da autorização.
Para validação de escopo restrito e explicitamente aprovada, confirm e test aceitam --cmd. Prefira o perfil padrão id sempre que for suficiente.
GITEA_PASSWORD='substitua-pela-senha-de-teste-aprovada' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--cmd 'uname -a' \
--output evidence/confirmation.json
export LEAKIX_API_KEY='substitua-pela-sua-chave'
python3 scanner.py discover \
--method app \
--pages 3 \
--output evidence/leakix.json
Para inspecionar registros do LeakIX de um host conhecido sem contatar esse host:
python3 scanner.py discover \
--method host \
--target gitea.example \
--pages 1 \
--output evidence/leakix-host.json
Os resultados da descoberta são pistas, não autorização para escanear ou explorar os sistemas listados.
hooks/post-index-change.diffpatch do repositório.0600 e se recusa a sobrescrever evidências existentes.Redirecionamentos HTTP autenticados são restritos à origem do alvo selecionado. A recuperação da saída Git também desativa redirecionamentos enquanto o cabeçalho de autorização está ativo.
Execuções ativas podem produzir:
confirmation.json — carimbos de data/hora, alvo, nome da conta, avaliação de versão, código de retorno e saída capturadaconfirmation.command-output.txt — saída completa do comando remotocredentials.txt — senha gerada da conta descartável, quando solicitadaembedded-result.txt preservado dentro das evidências JSONEsses arquivos podem conter dados sensíveis de engajamento. Eles são ignorados pelo .gitignore incluído, criados com modo 0600 e devem ser criptografados em repouso de acordo com sua política de tratamento de evidências.
A ferramenta evita deliberadamente a exclusão automática para que as evidências permaneçam disponíveis para revisão. Após o teste, um administrador do alvo deve:
audit-* gerada, se uma foi criadaafterdark-* gerado/tmp/gitea-validation-*/client.txt1.27.1 ou posteriorA execução bem-sucedida do PoC demonstra execução de comandos como a conta de serviço do Gitea. Isso não prova por si só acesso root, persistência, movimento lateral ou comprometimento do host subjacente.
id ou whoami--execute-poc para confirmOs testes incluídos são locais e não fazem solicitações de rede:
python3 -m unittest discover -s tests -v
Melhorias responsáveis são bem-vindas — especialmente correções de compatibilidade, redução de falsos positivos, melhorias na qualidade das evidências e fluxos de limpeza mais seguros. Por favor, não envie detalhes de alvos reais, credenciais, evidências privadas ou payloads armamentizados.
Para um problema de segurança nesta própria ferramenta, siga SECURITY.md.
Feito para pesquisadores cuidadosos que acreditam que um bom PoC deve ser reproduzível, atribuível e entediante de limpar. 🛡️
| Item | Detalhe |
|---|
| Produto | Gitea |
| Versões afetadas | >= 1.17.0, < 1.27.1 |
| Versão corrigida | 1.27.1 |
| Impacto | Execução remota de comandos como o usuário do SO do Gitea |
| Acesso necessário | Acesso de escrita ao repositório; registro aberto pode permitir que um atacante o crie |
| Aviso | GHSA-rcr6-4jqh-j84m |
| Modo | Comportamento de rede | Altera o estado do alvo? | Finalidade |
|---|
discover | Consulta apenas o LeakIX | Não | Busca em um índice de terceiros existente; não contata os hosts descobertos |
recon | Um alvo exato | Não | Inventaria rotas públicas fixas e o documento Swagger publicado pelo alvo |
verify | Um alvo exato | Não | Lê /api/v1/version e classifica a versão do Gitea informada |
test | Um alvo exato | Sim | Fluxo de conveniência: verificação de versão, checagem de registro, conta descartável, marcador, id e evidências |
confirm | Um alvo exato | Sim | Confirmação controlada com conta aprovada ou registro descartável explícito |