
Visualizzazione, Fuzzing, Exploit e Patch della vulnerabilità Baron Samedit
Visualizzazione, Fuzzing, Exploit e Patch della vulnerabilità Baron Samedit
Vedi il report »
Francesco Marchiori
·
Alessandro Lotto
Qualsiasi sistema operativo basato su Unix è dotato del comando sudo che consente un’elevazione temporanea dei privilegi di root per quegli utenti che sono autorizzati a farlo. Sudo offre quindi una funzionalità critica che, se abusata, può portare al compromesso della sicurezza e dell’affidabilità del sistema stesso. A causa della sua importanza all’interno del sistema operativo, il codice sorgente di sudo è soggetto a frequenti test e revisioni del codice. Questi hanno portato alla scoperta di una vulnerabilità di overflow basata su heap, denominata CVE-2021-3156, che sorprendentemente è rimasta nascosta per quasi 10 anni. Nemmeno le tecniche di fuzzing, una delle tecniche più utilizzate per la scoperta di bug e vulnerabilità, sono riuscite a individuarla prima. In questo articolo analizziamo in dettaglio la vulnerabilità CVE-2021-3156 di sudo, partendo dalla vulnerabilità di buffer overflow fino a come può essere sfruttata per ottenere una shell di root anche essendo un utente non privilegiato o senza avere il permesso di usare il comando sudo.
Nella directory Visualization ci sono un paio di script che abbiamo usato per visualizzare come vengono analizzati gli argomenti con o senza caratteri backslash e per analizzare come le variabili d’ambiente influenzano il layout dell’heap, al fine di comprendere meglio la struttura dell’exploit proposto.
Nella directory Fuzzing ci sono i file necessari per eseguire il fuzzing sulla versione vulnerabile di sudo. Viene anche spiegato come riuscire a fare fuzzing e come risolvere i problemi che impediscono ad AFL di funzionare subito, spiegando così come la vulnerabilità sia rimasta nascosta per quasi 10 anni.
Nella directory Exploit ci sono i file necessari per eseguire l’attacco su un’altra versione vulnerabile di sudo. Sfruttiamo la popolazione della memoria tramite variabili d’ambiente per eseguire heap feng shui e sovrascrivere il nome dell’oggetto service_user, al fine di eseguire il nostro codice invece di caricare una libreria.
Nella directory Patch c’è uno script overflow_simulation_patch.c che simula il comportamento dell’overflow e lo corregge con codice aggiuntivo che abbiamo scritto. Poiché gli sviluppatori del progetto Sudo hanno deciso di correggere il flusso della vulnerabilità anziché il codice stesso, mostriamo un approccio diverso e come può essere corretto con solo poche righe di codice.