Utiliidil wall, mis on osa util-linux paketist ja mõeldud sõnumite saatmiseks terminalidesse, avastati haavatavus (CVE-2024-28085), mis võimaldab rünnata teiste kasutajate terminale escape-järjestuste manipuleerimise kaudu. Probleem tuleneb sellest, et utiliit wall blokeerib escape-järjestuste kasutamise sisendvoos, kuid ei tee seda käsurea argumentide osas, mis võimaldab ründajal käivitada escape-järjestusi teiste kasutajate terminalides.
Näiteks, kui täita 'wall $(printf "\033[33mHI")', saab kuvada sõnumit "HI" kollases värvis. Escape-järjestuste abil, mis võimaldavad kursorit liigutada, sisu ekraanilt kustutada ja asendada, saab simuleerida sudo utiliidi parooli sisestamise kutset teise kasutaja terminalis. Kui kasutaja ei märka petukäiku ja sisestab oma parooli, siis parool registreeritakse sisestusajaloos kui mitteeksisteeriv käsk (põhimõtteliselt sisestab kasutaja käskude asemel oma parooli käsureale). "\033[3A" // liigutame kursori 3 rida üles "\033[K" // kustutame eelmise väljundi "[sudo] parool kasutajalt a_user:" // kuvame vale sudo kutse "\033[?25l" // seame taustavärvi, et varjata sisestust "\033[38;2;48;10;36m"
Teavituse andmisel, et sisestatud käsku ei leitud, käivitub paljudes jaotustes käitleja /usr/lib/command-not-found, mis püüab määrata paketti, milles puuduv käsk esineb, ning anda ettepaneku selle installimiseks. Probleem seisneb aga selles, et käitleja command-not-found'ile antakse mittetuvastatav käsk käsurea parameetrina, mis on nähtav süsteemi protsesside vaatamisel (näiteks, kui proovida käivitada installimata utiliiti 'xsnow', ilmub protsesside loendis ' /usr/lib/command-not-found -- xsnow'). Seega võib ründaja korraldada käivitatud protsesside jälgimise (näiteks analüüsides ilmumist '/proc/$pid/cmdline' prognoositava PID numbri jaoks) ja tuvastada ohvri sisestatud parooli käsureal.
Kuna kasutaja sisestaks parooli vale sudo kutse peale, on pakutud nipp, mis seisneb tõelise sudo utiliidi käivitamise jälgimises protsesside loendis, selle lõppemist ootamises ja rünnaku läbiviimises "wall" kohe pärast seda. Käsu escape-järjestuste manipuleerimise kaudu saab ründaja asendada tõelise sudo täitmise järel oleva sõnumi vale parooli uuesti sisestamise kutsega. Ohver võib arvata, et tegi sisestamisel vea ja sisestada parooli teist korda, paljastades parooli "command-not-found" töötleja argumentides.
Eduka rünnaku jaoks peab "mesg" režiim olema seatud väärtusele "y", mis on mõnes Linuxi jaotuses vaikimisi seatud Ubuntu, Debian ja CentOS/RHEL puhul. Rünnaku teostamise võimalust demonstreeritakse Ubuntu 22.04 vaikimisi konfiguratsioonis gnome-terminal’is. Debianis on rünnak keeruline, kuna vaikimisi jaotuses ei ole "command-not-found" töötlejat, ning CentOS/RHEL-is ei õnnestu rünnak, kuna wall utiliit on seatud ilma setgid liputa ja tal puudub ligipääs teistele terminalidele. Windows-terminali kasutamisel saab rünnakut muuta lõike sisu muutmiseks.
Haavatavus ilmnes util-linux paketis alates 2013. aastast, kui versioonis 2.24 lisati võimalus edastada sõnum käsureal wall, kuid unustati rakendada escape-järjestuste puhastamist. Haavatavuse parandamine on kaasatud eilse util-linux 2.40 versiooni. Huvitav on see, et util-linux 2.39 versiooni parandamise katses tuvastati veel üks sarnane haavatavus, mis võimaldab juhtivate sümbolite asendamist locale'ide manipulatsiooni kaudu.
Allikas: opennet.ru
