
Exploit PoC Python per CVE-2025-8110, che dimostra la scrittura arbitraria di file verso RCE in Gogs tramite manipolazione di symlink e abuso delle API. Progettato per la ricerca sulla sicurezza educativa e per ambienti di laboratorio autorizzati.
Questo repository contiene uno script di prova di concetto (PoC) in Python per dimostrare e analizzare la vulnerabilità registrata come CVE-2025-8110 nel servizio Git auto-ospitato Gogs (versioni 0.13.3 e precedenti).
[!WARNING] QUESTO SOFTWARE È FORNITO ESCLUSIVAMENTE A SCOPI EDUCATIVI E DI RICERCA SULLA SICUREZZA. L'uso di questo materiale contro obiettivi senza il consenso preventivo e scritto dei loro proprietari è completamente illegale. L'autore di questo repository non si assume alcuna responsabilità per danni, perdite o usi impropri derivanti dall'uso di questo codice. Utilizzalo sempre a tuo rischio e solo in ambienti controllati o simulazioni autorizzate (come laboratori CTF).
Il CVE-2025-8110 è una vulnerabilità critica di Scrittura Arbitraria di File causata da una validazione insufficiente nella gestione dei collegamenti simbolici (symlink) tramite l'API PutContents di Gogs.
Un attaccante autenticato può:
.git/config del server).root, la scrittura di file può essere elevata a Esecuzione Remota di Codice (RCE) iniettando il comando desiderato nella proprietà sshCommand del file di configurazione di Git.exploit.py)Lo script automatizza l'intero processo di sfruttamento utilizzando credenziali valide e un Token API generato manualmente in precedenza tramite l'interfaccia web di Gogs:
┌──────────────────────────────────────────────┐
│ Macchina dell'Attaccante (Kali) │
└──────────────────────┬───────────────────────┘
│
(1) Crea Repository │ (3) Carica Symlink (.git/config)
Maligno tramite API │ tramite git push
▼
┌──────────────────────────────────────────────┐
│ Tunnel SSH Locale (porta 8080) │
└──────────────────────┬───────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Server Vittima Gogs │
│ (Porta 3001) │
└──────────────────────┬───────────────────────┘
│
│ (4) API PUT "contents"
│ Segue Symlink e scrive
│ "sshCommand" in .git/config
▼
┌──────────────────────────────────────────────┐
│ Esecuzione del Payload come ROOT │
└──────────────────────────────────────────────┘
create_malicious_repo: Effettua una richiesta POST all'API di Gogs (/api/v1/user/repos) autenticandosi con il token di accesso fornito per creare un nuovo repository con un nome casuale generato dinamicamente.upload_malicious_symlink:
/tmp/..git/config (il file di configurazione di Git del server).git push).exploit: Definisce il payload utilizzando un trucco di iniezione nella proprietà sshCommand di Git. Aggiornando il contenuto tramite l'API, Gogs è costretto a sovrascrivere il proprio .git/config sul server. Quando viene attivata l'ultima parte del processo di Git, il sistema di Gogs esegue il comando di terminale (una shell inversa in Bash) restituendo la connessione al tuo listener Netcat.Assicurati di configurare i dati di identità globali in Git prima di eseguire lo script per evitare errori durante il commit automatico:
git config --global user.email "[email protected]"
git config --global user.name "studente"