
Este repositório contém um script de prova de conceito (PoC) em Python para demonstrar e analisar a vulnerabilidade registrada como CVE-2025-8110 no serviço de Git auto-hospedado Gogs (versões 0.13.3 e anteriores).
[!WARNING] ESTE SOFTWARE É FORNECIDO APENAS PARA FINS EDUCACIONAIS E DE PESQUISA EM SEGURANÇA. O uso deste material contra alvos sem o consentimento prévio e por escrito de seus proprietários é completamente ilegal. O autor deste repositório não se responsabiliza por nenhum dano, prejuízo ou mau uso decorrente do uso deste código. Utilize-o sempre por sua própria conta e risco e dentro de ambientes controlados ou simulações autorizadas (como laboratórios de CTF).
O CVE-2025-8110 é uma vulnerabilidade crítica de Escrita Arbitrária de Arquivos provocada por uma validação insuficiente ao manipular links simbólicos (symlinks) através da API PutContents do Gogs.
Um atacante autenticado pode:
.git/config do servidor).root, a escrita de arquivos pode ser escalada para Execução Remota de Código (RCE) injetando o comando desejado dentro da propriedade sshCommand do arquivo de configuração do Git.exploit.py)O script automatiza todo o processo de explotação utilizando credenciais válidas e um Token de API previamente gerado manualmente na interface web do Gogs:
┌──────────────────────────────────────────────┐
│ Máquina do Atacante (Kali) │
└──────────────────────┬───────────────────────┘
│
(1) Cria Repositório │ (3) Envia Symlink (.git/config)
Malicioso via API │ via git push
▼
┌──────────────────────────────────────────────┐
│ Túnel SSH Local (porta 8080) │
└──────────────────────┬───────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Servidor Vítima Gogs │
│ (Porta 3001) │
└──────────────────────┬───────────────────────┘
│
│ (4) API PUT "contents"
│ Segue Symlink e escreve
│ "sshCommand" em .git/config
▼
┌──────────────────────────────────────────────┐
│ Execução do Payload como ROOT │
└──────────────────────────────────────────────┘
create_malicious_repo: Realiza uma requisição POST à API do Gogs (/api/v1/user/repos) autenticando-se com o token de acesso fornecido para criar um novo repositório com um nome aleatório gerado dinamicamente.upload_malicious_symlink:
/tmp/..git/config (o arquivo de configuração do Git do servidor).git push).exploit: Define a carga útil (payload) utilizando um truque de injeção na propriedade sshCommand do Git. Ao atualizar o conteúdo através da API, o Gogs é forçado a sobrescrever seu próprio .git/config no servidor. Quando a última parte do processo do Git é ativada, o sistema do Gogs executa o comando de terminal (um shell reverso em Bash) retornando a conexão ao seu listener no Netcat.Certifique-se de configurar os dados de identidade global no Git antes de executar o script para evitar erros ao realizar o commit automático:
git config --global user.email "[email protected]"
git config --global user.name "estudiante"