U alatu , ki se uporablja za organizacijo izvrševanja ukazov v imenu drugih uporabnikov, ranljivost (), kar omogoča, da povečaš svoje privilegije v sistemu na uporabnika root. Težava se pojavi od različice sudo 1.7.1 naprej, samo pri uporabi v datoteki /etc/sudoers možnosti „pwfeedback“, ki je privzeto onemogočena, vendar aktivirana v nekaterih distribucijah, kot sta Linux Mint in Elementary OS. Težava je odpravljena v različici , objavljeni pred nekaj urami. V distribucijah pa ranljivost še vedno ostaja neodpravljena.
Možnost „pwfeedback“ vključuje prikaz simbola „*“ po vsakem vnesenem znaku pri vnosu gesla. Zaradi v implementaciji funkcije getln(), določene v datoteki tgetpass.c, lahko prevelik niz gesla, poslan preko standardnega vhodnega toka (stdin), pod določenimi pogoji ne zdrži v dodeljenem predpomnilniku in prepisuje druge podatke na skladu. Preliv nastane med izvajanjem koda sudo s privilegiji root.
Namen težave je v tem, da pri uporabi posebnega simbola ^U (brisanje vrstice) med okvaro zapisa, koda, ki je odgovorna za čiščenje prikazanih simbolov „*“, ponastavi podatke o dosegljivi velikosti predpomnilnika, vendar ne vrne v prvotno stanje kazalnika na trenutno pozicijo v predpomnilniku. Drug dejavnik, ki prispeva k izkoriščanju, je pomanjkanje samodejnega onemogočenja načina „pwfeedback“ ob prejemu podatkov, ki niso iz terminala, temveč preko vhodnega toka (ta pomanjkljivost omogoča ustvarjanje pogojev za napako pri zapisu, na primer na sistemih z enosmernimi napaka se pojavi pri poskusu zapisa za konec cevi za branje).
Ker lahko napadalec popolnoma nadzira prepisovanje podatkov na skladu, ni težko ustvariti exploita, ki omogoča povečanje privilegijev na uporabnika root. Težava se lahko izkorišča s strani katerega koli uporabnika, ne glede na pravice za uporabo sudo in posebne nastavitve uporabnika v sudoers. Za zaklepanje težave je potrebno preveriti, ali v /etc/sudoers ni nastavitve „pwfeedback“ in jo, če je potrebno, onemogočiti ("Defaults !pwfeedback"). Za preverjanje prisotnosti težave lahko zaženete kodo:
$ perl -e ‘print(("A" x 100 . "\x{00}") x 50)’ | sudo -S id
Geslo: Segmentation fault
Izvor: opennet.ru
