Nell'utility , utilizzata per gestire l'esecuzione di comandi per conto di altri utenti, vulnerabilità (), che consente di elevare le proprie privilegi a quello di utente root. Il problema si manifesta a partire dalla versione di sudo 1.7.1 solo quando si usa nell'file /etc/sudoers l'opzione «pwfeedback», che è disattivata per default, ma attivata in alcune distribuzioni, come Linux Mint ed Elementary OS. Il problema è stato risolto nella versione , pubblicata alcune ore fa. Nelle distribuzioni la vulnerabilità è ancora irrisolta.
L'opzione «pwfeedback» abilita la visualizzazione del simbolo «*» dopo ogni carattere inserito durante l'immissione della password. A causa di un'implementazione della funzione getln(), definita nel file tgetpass.c, una stringa di password troppo larga, trasmessa tramite l'input standard (stdin) in determinate condizioni, può non adattarsi nel buffer allocato e sovrascrivere altri dati nello stack. Il buffer overflow si verifica durante l'esecuzione del codice sudo con i privilegi di root.
Il nocciolo del problema è che, quando si utilizza durante l'immissione il carattere speciale ^U (cancellazione della riga) e si verifica un errore durante l'operazione di scrittura, il codice che gestisce la cancellazione dei caratteri visualizzati «*» azzera i dati sulla dimensione disponibile del buffer, ma non ripristina il puntatore alla posizione corrente nel buffer. Un altro fattore che contribuisce all'exploit è l'assenza di disattivazione automatica della modalità «pwfeedback» quando i dati arrivano non da un terminale, ma attraverso un flusso di input (questa mancanza consente di creare condizioni per un errore di scrittura, ad esempio, su sistemi con canali anonimi l'errore si verifica quando si tenta di scrivere oltre la fine del canale per la lettura).
Poiché un attaccante può controllare completamente la riscrittura dei dati nello stack, non è difficile creare un exploit che consente di elevare i propri privilegi a quello di utente root. Il problema può essere sfruttato da qualsiasi utente, indipendentemente dai diritti di utilizzo di sudo e dalla presenza di impostazioni specifiche per utente in sudoers. Per bloccare il problema, è necessario assicurarsi che non ci sia l'impostazione «pwfeedback» in /etc/sudoers e disattivarla se necessario («Defaults !pwfeedback»). Per verificare la presenza del problema, puoi eseguire il codice:
$ perl -e ‘print((«A» x 100 . «\x{00}») x 50)’ | sudo -S id
Password: Segmentation fault
Fonte: opennet.ru
