sudo root ievainojamība, kas ietekmē Linux Mint un Elementary OS

Lietderībā sudo, ko izmanto, lai organizētu komandu izpildi citu lietotāju vārdā, identificēts ievainojamība (CVE-2019-18634), kas ļauj palielināt savas privilēģijas sistēmā root lietotājam. Problēma parādās tikai kopš sudo 1.7.1 izlaišanas, izmantojot opciju “pwfeedback” failā /etc/sudoers, kas pēc noklusējuma ir atspējota, bet iespējota dažos izplatījumos, piemēram, Linux Mint un Elementary OS. Problēma ir novērsta laidienā sudo 1.8.31, publicēts pirms dažām stundām. Ievainojamība izplatīšanas komplektos joprojām nav novērsta.

Opcija “pwfeedback” ļauj parādīt “*” rakstzīmi pēc katras ievadītās rakstzīmes, ievadot paroli. Tāpēc ka Kļūdas Ieviešot funkciju getln(), kas definēta failā tgetpass.c, pārāk liela paroles virkne, kas tiek nodota caur standarta ievades straumi (stdin), noteiktos apstākļos var neietilpst piešķirtajā buferī un pārrakstīt citus steka datus. Pārpilde notiek, palaižot sudo kodu kā root.

Problēmas būtība ir tāda, ka, ievades laikā izmantojot speciālo rakstzīmi ^U (rindas notīrīšana) un ja ierakstīšanas darbība neizdodas, kods, kas atbild par izvades rakstzīmju “*” dzēšanu, atiestata datus par pieejamo bufera lielumu, bet ne. atgriezt rādītāju sākotnējās vērtības pašreizējā stāvoklī buferī. Vēl viens faktors, kas veicina izmantošanu, ir automātiskas “pwfeedback” režīma atspējošanas trūkums, kad dati pienāk nevis no termināļa, bet caur ievades straumi (šis trūkums ļauj radīt apstākļus ierakstīšanas kļūdai, piemēram, sistēmās ar vienvirziena nenosaukti kanāli Mēģinot rakstīt līdz lasīšanas kanāla beigām, rodas kļūda).

Tā kā uzbrucējam ir pilnīga kontrole pār steka datu pārrakstīšanu, nav grūti izveidot ekspluatāciju, kas ļauj viņam palielināt savas privilēģijas līdz root. Problēmu var izmantot jebkurš lietotājs neatkarīgi no sudo atļaujām vai lietotāja specifiskajiem iestatījumiem sudoers. Lai bloķētu problēmu, jums jāpārliecinās, vai mapē /etc/sudoers nav iestatījuma “pwfeedback”, un, ja nepieciešams, tas ir jāatspējo (“Noklusējuma !pwfeedback”). Lai pārbaudītu, vai pastāv problēma, varat palaist kodu:

$ perl -e 'print(("A" x 100 . "\x{00}") x 50)' | sudo -S id
Parole: segmentācijas kļūda

Avots: opennet.ru

Pievieno komentāru