Në shërbimin publik , përdoret për të organizuar ekzekutimin e komandave në emër të përdoruesve të tjerë, cenueshmëria (), e cila ju lejon të përshkallëzoni privilegjet tuaja te përdoruesi rrënjë. Problemi ka qenë i pranishëm që nga sudo 1.7.1 vetëm kur përdoret opsioni "pwfeedback" në skedarin /etc/sudoers, i cili është i çaktivizuar si parazgjedhje, por i aktivizuar në disa shpërndarje, si p.sh. Linux Mint dhe Elementary OS. Problemi është rregulluar në version. , publikuar disa orë më parë. Dobësia mbetet e paarnuar në shpërndarje.
Opsioni "pwfeedback" mundëson shfaqjen e simbolit "*" pas çdo karakteri të futur gjatë futjes së një fjalëkalimi. Për shkak të Në implementimin e funksionit getln() të përcaktuar në skedarin tgetpass.c, një varg fjalëkalimesh i tejmadhësuar i kaluar nëpërmjet rrjedhës standarde të hyrjes (stdin) mund të mos futet në buffer-in e alokuar dhe të mbishkruajë të dhëna të tjera në pirg. Mbikalimi ndodh kur ekzekutohet kodi sudo me privilegje root.
Thelbi i problemit është se kur përdoret karakteri special ^U (pastrimi i rreshtit) gjatë procesit të hyrjes dhe nëse operacioni i shkrimit dështon, kodi përgjegjës për pastrimin e karaktereve të daljes "*" rivendos të dhënat në madhësinë e disponueshme të buffer-it, por nuk e kthen treguesin në pozicionin aktual në buffer në vlerën e tij origjinale. Një faktor tjetër që kontribuon në shfrytëzim është mungesa e çaktivizimit automatik të modalitetit "pwfeedback" kur të dhënat nuk merren nga terminali, por përmes rrjedhës së hyrjes (kjo e metë lejon krijimin e kushteve për shfaqjen e një gabimi shkrimi, për shembull, në sisteme me një drejtim). Gabimi ndodh kur përpiqeni të shkruani përtej fundit të kanalit të leximit).
Meqenëse një sulmues ka kontroll të plotë mbi mbishkrimin e të dhënave në stack, është e lehtë të krijohet një shfrytëzim për të përshkallëzuar privilegjet e tyre në root. Ky problem mund të shfrytëzohet nga çdo përdorues, pavarësisht lejeve sudo ose cilësimeve specifike të përdoruesit në sudoers. Për të parandaluar këtë problem, sigurohuni që cilësimi "pwfeedback" të mos jetë i pranishëm në /etc/sudoers dhe, nëse është e nevojshme, çaktivizoni atë ("Parazgjedhjet !pwfeedback"). Për të testuar problemin, ekzekutoni kodin e mëposhtëm:
$ perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id
Fjalëkalimi: Gabim segmentimi
Burimi: opennet.ru
