U alatu wall, koji dolazi u paketu util-linux i koristi se za slanje poruka na terminale, otkrivena je ranjivost (CVE-2024-28085) koja omogućava napad na terminale drugih korisnika putem manipulacije escape sekvencama. Problem nastaje zbog toga što alat wall blokira korištenje escape sekvenci u ulaznom toku, ali ne izvršava ovu radnju za argumente u komandnoj liniji, što napadaču omogućava da izvrši escape sekvence u terminalu drugih korisnika.
Na primjer, izvršavanjem ‘wall $(printf "\033[33mHI")’ moguće je ispisati natpis «HI» žutom bojom. Pomoću escape sekvenci, koje omogućavaju pomicanje pokazivača, brisanje i zamjenu sadržaja na ekranu, moguće je simulirati prikaz poziva za unos lozinke od alata sudo u terminalu drugog korisnika. Ako korisnik ne primijeti zamku i unese svoju lozinku, lozinka će se prikazati u povijesti unosa kao nepostojeća komanda (u suštini, korisnik umjesto komande unosi svoju lozinku u komandnu liniju). "\033[3A" // pomičemo kursor prema gore za 3 reda "\033[K" // brišemo prethodni ispis "[sudo] password for a_user:" // ispisujemo lažni zahtjev sudo "\033[?25l" // postavljamo pozadinsku boju za skrivanje unosa "\033[38;2;48;10;36m"
Tijekom ispisivanja upozorenja da unesena komanda nije pronađena, u mnogim distribucijama pokreće se obrada /usr/lib/command-not-found, koja pokušava odrediti paket koji sadrži nedostajuću komandu i izdati savjet o mogućnosti njenog instaliranja. Problem je u tome što se prilikom pokretanja obrade command-not-found nepostojeća komanda prosljeđuje kao parametar komandnoj liniji, koji je vidljiv prilikom pregleda procesa u sustavu (na primjer, prilikom pokušaja pokretanja neinstaliranog alata «xsnow», u popisu procesa bit će vidljivo «/usr/lib/command-not-found -- xsnow»). Sukladno tome, napadač može organizirati praćenje pokretanih procesa (na primjer, analizom pojavljivanja «/proc/$pid/cmdline» za predviđeni broj PID) i odrediti lozinku koju je žrtva unijela u komandnu liniju.
Kako bi korisnik unio lozinku kao odgovor na lažni sudo upit, predložen je trik koji se temelji na praćenju stvarnog pokretanja sudo alata u listi procesa, čekanju da završi i izvođenju napada putem „wall“ odmah nakon toga. Manipulacijama s escape sekvencama, napadač može zamijeniti poruku posle stvarnog izvršavanja sudo sa lažnim pozivom na ponovni unos lozinke. Žrtva može pomisliti da je pogriješila kod unosa i ponovo unijeti lozinku, otkrivajući je u argumentima obradnika „command-not-found“.
Za uspješan napad potrebno je postaviti mod „mesg“ na vrijednost „y“, što je prema zadanim postavkama uključeno u Ubuntu, Debian i CentOS/RHEL. Mogućnost izvođenja napada demonstrirana je u Ubuntu 22.04 u zadanoj konfiguraciji korištenjem gnome-terminala. U Debianu je napad otežan, budući da podrazumijevani distribucija ne uključuje obradnik „command-not-found“, dok u CentOS/RHEL napad neće uspjeti, jer je wall alat instaliran bez setgid oznake i nema pristup tuđim terminalima. Kada se koriste windows-terminal, napad se može modificirati za promjenu sadržaja međuspremnika.
Ranljivost se pojavila u util-linux paketu od 2013. godine, nakon što je verzija 2.24 dodala mogućnost navođenja poruke u wall naredbi, ali je zaboravila primijeniti čišćenje escape sekvenci. Ispravka ranjivosti uključena je u jučerašnje izdanje util-linux 2.40. Zanimljivo je da je pri pokušaju ispravke ranjivosti u izdanju util-linux 2.39 otkrivena još jedna slična ranjivost koja dopušta zamjenu kontrolnih znakova manipulacijom s lokalizacijama.
Izvor: opennet.ru
