
Sfruttamento della vulnerabilità chiamata "Dirty_Sock" (CVE-2019-7304) nell'API REST del demone snapd di Canonical.
Sfruttare la vulnerabilità chiamata "Dirty_Sock" (CVE-2019-7304) nell'API REST del demone snapd di Canonical (un servizio predefinito in Ubuntu Linux) per ottenere accesso root.
Guida di Ramil Mustafayev: https://kryptohaker.medium.com/linux-privilege-escalation-via-snapd-using-dirty-sock-exploit-and-demonstration-of-cve-2019-7304-892716cf99ca
Questa vulnerabilità è stata sfruttata nelle versioni di snapd precedenti alla 2.37, a causa di un indirizzo del socket remoto non correttamente validato e analizzato durante l'esecuzione dei controlli di accesso sul suo socket UNIX. Ciò ha interessato anche alcune distribuzioni Unix e Linux all'epoca (ad es. Ubuntu 16.04). Pertanto, per implementare questo sfruttamento, abbiamo bisogno di snapd 2.32 e Ubuntu 16.04.
Ho ottenuto il pacchetto Debian di snapd 2.32 da https://launchpad.net/ubuntu/+source/snapd

Per prima cosa, controllo la macchina Ubuntu per vedere se è vulnerabile allo sfruttamento utilizzando i comandi cat /etc/lsb-release (che mostra la versione di Ubuntu con la sua descrizione) e uname -a (che verifica le informazioni sul computer e sul sistema operativo corrente). Quindi, siamo certi che questa macchina sia sfruttabile.

Il passo successivo è avviare il servizio snapd utilizzando il comando systemctl start snapd (In realtà, quando gli aggressori sfruttano questa falla, il servizio snapd deve essere avviato dall'amministratore, altrimenti non saranno in grado di lanciarlo con successo). Quindi, possiamo verificare la versione di snapd per assicurarci che sia vulnerabile.

Successivamente, verificherò i privilegi dell'utente utilizzando i comandi id (che mostra le informazioni sull'utente e sul gruppo) e tail /etc/passwd (Il file /etc/passwd viene utilizzato per tenere traccia di ogni utente registrato). I risultati seguenti mostrano che l'aggressore con il nome utente 'coby' è un utente normale, che ha il minimo accesso al sistema.

Per lanciare questo attacco, utilizzeremo lo script dirty_sock, che ha due versioni, ottenuto da https://github.com/initstring/dirty_sock. Mentre la Versione Uno richiede una connessione Internet in uscita e l'esecuzione del servizio SSH, la Versione Due può essere eseguita direttamente senza requisiti.
Nel file dirty_sockv2.py, che verrà utilizzato in questo sfruttamento, è necessario concentrarsi su alcuni componenti chiave. Il primo componente chiave in questo script è la variabile TROJAN_SNAP, che è una stringa codificata in base64 che rappresenta un pacchetto snap installabile. Questo pacchetto è uno snap 'devmode' vuoto che ha uno script bash nell'hook di installazione, che creerà un nuovo utente ('devmode' (modalità sviluppatore) è una modalità di installazione speciale che consente agli snap di bypassare il confinamento rigoroso per scopi di sviluppo e debug).

Un altro componente considerevole in questo script è la funzione create_sockfile(). Questa funzione sfrutta l'analisi non sicura nel file "snapd's ucrednet.go" per generare un file socket casuale e inserire il dirty sock, ;uid=0;, permettendoci di sovrascrivere la variabile UID.

Per implementare questo sfruttamento, eseguo semplicemente dirty_sockv2.py nel terminale. Dopo aver eseguito con successo l'exploit dirty_sock, possiamo vedere che un account dirty_sock con la stessa password è stato creato automaticamente dallo script.

Quindi, controllo /etc/passwd per vedere l'elenco degli utenti registrati e vedo che è stato creato un nuovo utente chiamato 'dirty_sock'.

Utilizzando il comando su, posso accedere all'account 'dirty_sock' utilizzando le credenziali scoperte. Dopo aver effettuato l'accesso con successo, posso controllare i privilegi di questo utente e vedere che è nel gruppo sudo. Ciò significa che l'aggressore ha già ottenuto il controllo completo del sistema e può fare qualsiasi cosa con i massimi privilegi.

Il punteggio CVSS di questa vulnerabilità è 8.8 (Alta Gravità), il che significa che può causare un enorme impatto sul sistema se sfruttata. Questa vulnerabilità ha un'alta gravità, poiché non richiede privilegi elevati per essere sfruttata. Quando un attaccante ha già un punto d'appoggio sul sistema (ad es. un utente con privilegi bassi), può elevare i propri privilegi a root, rendendo questa vulnerabilità una seria minaccia alla sicurezza locale, specialmente in ambienti multi-utente o cloud.