În utilitate , folosit pentru a organiza executarea comenzilor în numele altor utilizatori, vulnerabilitate (), care vă permite să vă escaladați privilegiile către utilizatorul root. Problema a fost prezentă de la sudo 1.7.1 doar la utilizarea opțiunii „pwfeedback” din fișierul /etc/sudoers, care este dezactivată în mod implicit, dar activată în unele distribuții, cum ar fi Linux Mint și Elementary OS. Problema a fost rezolvată în lansare , publicat acum câteva ore. Vulnerabilitatea rămâne neremediată în kiturile de distribuție.
Opțiunea „pwfeedback” permite afișarea caracterului „*” după fiecare caracter introdus la introducerea unei parole. Din cauza În implementarea funcției getln(), definită în fișierul tgetpass.c, un șir de parolă prea mare transmis prin fluxul de intrare standard (stdin) în anumite condiții poate să nu se potrivească în buffer-ul alocat și să suprascrie alte date din stivă. Depășirea are loc la rularea codului sudo ca root.
Esența problemei este că, atunci când se folosește caracterul special ^U (ștergerea liniei) în timpul introducerii și dacă operația de scriere eșuează, codul responsabil pentru ștergerea caracterelor „*” de ieșire resetează datele la dimensiunea bufferului disponibil, dar nu returnează indicatorul la poziția curentă a valorii inițiale din buffer. Un alt factor care contribuie la exploatare este lipsa dezactivării automate a modului „pwfeedback” atunci când datele sosesc nu de la terminal, ci prin fluxul de intrare (acest defect permite crearea condițiilor pentru ca o eroare de înregistrare să apară, de exemplu, pe sisteme cu unidirecțional apare o eroare atunci când încercați să scrieți la sfârșitul unui canal de citire).
Deoarece un atacator are control complet asupra suprascrierii datelor de pe stivă, nu este dificil să creeze un exploit care să-i permită să-și escaladeze privilegiile la root. Problema poate fi exploatată de orice utilizator, indiferent de permisiunile sudo sau setările specifice utilizatorului din sudoers. Pentru a bloca problema, ar trebui să vă asigurați că nu există nicio setare „pwfeedback” în /etc/sudoers și, dacă este necesar, să o dezactivați („Valori implicite !pwfeedback”). Pentru a verifica dacă există o problemă, puteți rula codul:
$ perl -e ‘print((„A” x 100 . „\x{00}”) x 50)’ | sudo -S id
Parola: Eroare de segmentare
Sursa: opennet.ru
