În utilitarul wall, livrat în pachetul util-linux și destinat trimiterii de mesaje în terminale, a fost descoperită o vulnerabilitate (CVE-2024-28085) care permite atacuri asupra terminalelor altor utilizatori prin manipularea secvențelor de escape. Problema este cauzată de faptul că utilitarul wall blochează utilizarea secvențelor de escape în fluxul de intrare, dar nu efectuează această operație pentru argumentele din linia de comandă, permițând atacatorului să execute secvențe de escape în terminalul altor utilizatori.
De exemplu, executând ‘wall $(printf «\033[33mHI»)’ se poate afișa textul «HI» cu culoarea galbenă. Prin intermediul secvențelor de escape, care permit mutarea cursorului, curățarea și înlocuirea conținutului pe ecran, se poate simula afișarea unui mesaj de solicitare a parolei de la utilitarul sudo în terminalul unui alt utilizator. Dacă utilizatorul nu observă înșelăciunea și introduce parola, aceasta va fi înregistrată în istoria comenzilor ca o comandă inexistentă (în esență, utilizatorul va introduce parola în linia de comandă în loc de o comandă). «\033[3A» // mutăm cursorul în sus cu 3 linii «\033[K» // ștergem afișarea anterioară «[sudo] password for a_user:» // afișăm o solicitare falsă sudo «\033[?25l» // setăm culoarea de fundal pentru a ascunde introducerea «\033[38;2;48;10;36m»
În timpul afișării unui avertisment că comanda introdusă nu a fost găsită, în multe distribuții se lansează handlerul /usr/lib/command-not-found, care încearcă să determine pachetul în care se află comanda lipsă și să ofere o sugestie cu privire la posibilitatea instalării acesteia. Problema este că, atunci când handlerul command-not-found este apelat, comanda inexistentă este transmisă acestuia ca argument de linie de comandă, care este vizibil atunci când se observă procesele din sistem (de exemplu, în cazul încercării de a lansa un utilitar neinstalat precum «xsnow», în lista proceselor va apărea «/usr/lib/command-not-found — xsnow»). Prin urmare, atacatorul poate organiza monitorizarea proceselor lansate (de exemplu, analizând apariția «/proc/$pid/cmdline» pentru un număr PID previzibil) și poate determina parola introdusă de victimă în linia de comandă.
Pentru ca utilizatorul să introducă parola ca răspuns la o cerere falsă sudo, a fost propus un truc, constând în monitorizarea în lista de procese a execuției reale a utilitarului sudo, așteptarea finalizării acestuia și desfășurarea atacului prin „wall” imediat după aceea. Prin manipulări cu secvențe de escape, atacatorul poate înlocui mesajul după executarea reală a sudo cu o cerere falsă de introducere a parolei. Victima poate crede că a greșit la introducerea parolei și poate introduce din nou parola, expunând astfel parola în argumentele handler-ului „command-not-found”.
Pentru un atac de succes, este necesară setarea modului „mesg” la valoarea „y”, care este setată în mod implicit în Ubuntu, Debian și CentOS/RHEL. Posibilitatea desfășurării atacului a fost demonstrată în Ubuntu 22.04 în configurația implicită folosind gnome-terminal. În Debian, atacul este îngreunat, deoarece în distribuția implicită nu este activat handler-ul „command-not-found”, iar în CentOS/RHEL atacul nu va funcționa, deoarece utilitarul wall este instalat fără flagul setgid și nu are acces la terminalele altor utilizatori. Atunci când se folosește windows-terminal, atacul poate fi modificat pentru a schimba conținutul clipboard-ului.
Vulnerabilitatea se manifestă în pachetul util-linux din 2013, după ce în versiunea 2.24 a fost adăugată opțiunea de a specifica un mesaj în linia de comandă wall, dar s-a uitat să se aplice curățarea secvențelor de escape. Corectarea vulnerabilității a fost inclusă în versiunea util-linux 2.40 de ieri. De remarcat că, în încercarea de a corecta vulnerabilitatea din versiunea util-linux 2.39, a fost identificată o altă vulnerabilitate similară, care permite substituirea simbolurilor de control prin manipularea localelor.
Sursa: opennet.ro
