În utilitarul , utilizat pentru a organiza executarea comenzilor în numele altor utilizatori, vulnerabilitate (), care permite creșterea privilegiilor în sistem până la utilizatorul root. Problema apare începând cu versiunea sudo 1.7.1, utilizată doar cu opțiunea „pwfeedback” din fișierul /etc/sudoers, care este dezactivată implicit, dar activată în unele distribuții, cum ar fi Linux Mint și Elementary OS. Problema este rezolvată în versiunea , publicată acum câteva ore. În distribuțiile vulnerabilitatea rămâne încă nerezolvată.
Opțiunea „pwfeedback” activează afișarea caracterului „*” după fiecare caracter introdus la introducerea parolei. Din cauza implementării funcției getln(), definită în fișierul tgetpass.c, un șir de parole prea mare, transmis prin fluxul de intrare standard (stdin), poate să nu încapă în bufferul alocat și să suprascrie alte date din stivă în anumite condiții. Suprasarcina apare în timpul executării codului sudo cu privilegii root.
Esenta problemei este că, atunci când se utilizează în procesul de introducere caracterul special ^U (curățarea liniei) și în cazul unei erori în operația de scriere, codul responsabil pentru curățarea simbolurilor afișate „*” resetează datele despre dimensiunea disponibilă a bufferului, dar nu returnează la valoarea inițială pointerul la poziția curentă din buffer. Un alt factor care contribuie la exploatare este absența dezactivării automate a modului „pwfeedback” la primirea datelor nu din terminal, ci prin fluxul de intrare (această nefinisare permite crearea condițiilor pentru apariția unei erori de scriere, de exemplu, pe sistemele cu canale unidirecționale eroarea apare atunci când se încearcă să se scrie dincolo de sfârșitul canalului de citire).
Deoarece atacatorul poate controla complet suprascrierea datelor în stivă, nu este greu să se creeze un exploit care să permită creșterea privilegiilor la utilizatorul root. Problema poate fi exploatată de orice utilizator, indiferent de drepturile de utilizare a sudo și de configurațiile specifice utilizatorului din sudoers. Pentru a bloca problema, ar trebui să te asiguri că opțiunea „pwfeedback” nu este prezentă în /etc/sudoers și, dacă este necesar, să o dezactivezi („Defaults !pwfeedback”). Pentru a verifica prezența problemei, poți executa codul:
$ perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id
Parolă: Fault de segmentare
Sursa: opennet.ro
