Nell'utility , utilizzata per organizzare l'esecuzione di comandi per conto di altri utenti, vulnerabilità (), che consente di elevare i privilegi di sistema a utente root. Il problema si manifesta a partire dalla versione 1.7.1 di sudo, solo quando viene utilizzata l'opzione «pwfeedback» nel file /etc/sudoers, che è disabilitata di default ma attivata in alcune distribuzioni, come Linux Mint ed Elementary OS. Il problema è stato risolto nella versione , pubblicata poche ore fa. Nelle distribuzioni la vulnerabilità rimane ancora irrisolta.
L'opzione «pwfeedback» include la visualizzazione del simbolo «*» dopo ogni carattere inserito durante la digitazione della password. A causa di un'implementazione della funzione getln(), definita nel file tgetpass.c, una stringa di password troppo grande passata tramite lo standard input (stdin) può, in determinate condizioni, non adattarsi nel buffer allocato e sovrascrivere altri dati nello stack. Il sovraccarico si verifica durante l'esecuzione del codice sudo con privilegi di root.
Il problema principale è che, quando si utilizza il carattere speciale ^U (cancellazione della riga) durante l'immissione e si verifica un errore nell'operazione di scrittura, il codice responsabile della pulizia 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'esploitazione è l'assenza della disattivazione automatica della modalità «pwfeedback» quando i dati vengono ricevuti non da un terminale, ma attraverso un flusso di input (questa mancanza consente di creare condizioni per la generazione di un errore di scrittura, ad esempio su sistemi con canali unidirezionali. 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 consenta di elevare i propri privilegi a quelli dell'utente root. Il problema può essere sfruttato da qualsiasi utente, indipendentemente dai diritti di utilizzo di sudo e dalla presenza di impostazioni specifiche per l'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, è possibile eseguire il seguente codice:
$ perl -e 'print(('A' x 100 . '\x{00}') x 50)' | sudo -S id
Password: Segmentation fault
Fonte: opennet.ru
