Nell'utilità wall fornita nel pacchetto util-linux, destinata a inviare messaggi ai terminali, è stata identificata una vulnerabilità (CVE-2024-28085) che consente di attaccare i terminali di altri utenti tramite la manipolazione delle sequenze di escape. Il problema deriva dal fatto che l'utilità wall blocca l'uso delle sequenze di escape nel flusso di input, ma non esegue questa operazione per gli argomenti della riga di comando, consentendo all'attaccante di eseguire sequenze di escape nel terminale di altri utenti.
Ad esempio, eseguendo ‘wall $(printf "\033[33mHI")’ è possibile visualizzare il testo «HI» in giallo. Utilizzando le sequenze di escape che permettono di muovere il cursore, pulire e sostituire il contenuto sullo schermo, è possibile simulare la visualizzazione di una richiesta di inserimento della password dall'utilità sudo nel terminale di un altro utente. Se l'utente non nota la truffa e inserisce la propria password, questa verrà rivelata nella cronologia dei comandi come un comando inesistente (in pratica, l'utente invece di un comando inserirà la propria password nella riga di comando). «\033[3A» // spostiamo il cursore verso l'alto di 3 righe «\033[K» // rimuoviamo l'output precedente «[sudo] password for a_user:» // visualizziamo una richiesta sudo fittizia «\033[?25l» // impostiamo il colore di sfondo per nascondere l'input «\033[38;2;48;10;36m»
Durante la visualizzazione del messaggio che indica che il comando inserito non è stato trovato, molti distribuzioni avviano il gestore /usr/lib/command-not-found, che cerca di determinare il pacchetto in cui è presente il comando mancante e fornisce un suggerimento per la sua installazione. Il problema è che, durante l'avvio del gestore command-not-found, il comando inesistente viene passato come parametro della riga di comando, visibile quando si guarda i processi nel sistema (per esempio, quando si tenta di avviare un'utilità non installata come «xsnow», nell'elenco dei processi sarà visibile «/usr/lib/command-not-found — xsnow»). Di conseguenza, un attaccante può organizzare il monitoraggio dei processi in esecuzione (ad esempio, analizzando l'apparizione di «/proc/$pid/cmdline» per un numero PID previsto) e determinare la password inserita dalla vittima nella riga di comando.
Per fare in modo che l'utente inserisca la password in risposta a un invito fittizio di sudo, è stato suggerito un trucco che consiste nel monitorare nella lista dei processi il vero avvio dell'utility sudo, attendere la sua conclusione ed effettuare un attacco tramite «wall» subito dopo. Attraverso delle manipolazioni con le sequenze di escape, l'attaccante può sostituire il messaggio dopo l'esecuzione reale di sudo con un invito fittizio per reinserire la password. La vittima potrebbe pensare di aver commesso un errore durante l'immissione e inserire la password per la seconda volta, rivelando così la password negli argomenti del gestore «command-not-found».
Per un attacco di successo è necessaria l'impostazione della modalità «mesg» su valore «y», che di default è impostata in Ubuntu, Debian e CentOS/RHEL. La possibilità di condurre l'attacco è stata dimostrata in Ubuntu 22.04 con la configurazione di default utilizzando gnome-terminal. In Debian l'attacco è complicato, poiché il gestore «command-not-found» non è incluso di default nella distribuzione, e in CentOS/RHEL l'attacco non avrà successo, poiché l'utility wall è installata senza il flag setgid e non ha accesso ai terminali altrui. Usando windows-terminal, l'attacco può essere modificato per cambiare il contenuto degli appunti.
La vulnerabilità si manifesta nel pacchetto util-linux dal 2013, dopo che nella versione 2.24 è stata aggiunta la possibilità di specificare un messaggio nella riga di comando di wall, ma è stata dimenticata la pulizia delle sequenze di escape. La correzione della vulnerabilità è stata inclusa nella versione di ieri di util-linux 2.40. È interessante notare che durante i tentativi di correggere la vulnerabilità nella versione di util-linux 2.39 è emersa un'altra vulnerabilità simile, che consente la sostituzione dei caratteri di controllo tramite manipolazioni delle localizzazioni.
Fonte: opennet.ru
