Qualys avastas ohtliku haavatavuse (CVE-2023-6246) Glibc standardse C-kogu raamatukogus, mis võimaldab SUID-rakenduste käivitamise manipuleerimise kaudu koodi täitmist kõrgendatud õigustega. Uurijad suutsid arendada töötava eksploitatsiooni, mis võimaldab saada root-õigusi, manipuleerides käivitusargumentidega su utiliidi käivitamisel.
Haavatavus tuleneb puhverületusest __vsyslog_internal() funktsioonis, mida kasutatakse syslog() ja vsyslog() funktsioonide kutsumisel. Probleem tekib, kui SYSLOG_HEADER makro abil proovib väljastada liiga pika rakenduse nime. Üritades puhvrit pikendada arvestades pikka nime, toimub tõrge, mille järel andmed kirjutatakse algsesse väiksemasse puhvri.
Rünnakut organiseerides võib ründaja muuta protsessi nime, käivitades rakenduse utiliidi su kaudu, asendades argv[0] väärtuse, mida kasutatakse programmi nime teabe saamiseks logimisfailides, ning saavutada kontrollitud andmeülekande väljaspool eraldatud mäluruumi. Edasi saab ülepööramist kasutada nss_moduli struktuuri kirjutamiseks nss teegis, et luua jagatud teek ja laadida see root-õigustega.
Probleem ilmneb glibc 2.37 versioonist alates, mis avaldati 2022. aasta augustis ja sisaldab muudatusi, mis käsitlevad olukordi, kus proovida kirjutada liiga suuri sõnumeid. Haavatavuse parandamine, mis põhjustas selle puuduse, viidi glibc 2.36 haru kaudu ja vanemate glibc versioonidega jaotuste paketidesse, kuna parandatud lahendused kõrvaldasid CVE-2022-39046 haavatavuse, mis põhjustas mäluhalduses andmete leket. Nii juhtus, et mitteohtliku haavatavuse parandamine tõi esile kriitilise probleemi. On märkimisväärne, et sarnase haavatavuse kohta libc 5.4.3 teegis, funktsioonis vsyslog(), teatati juba 1997. aastal.
Haavatavuse olemasolu on kinnitatud Debian 12/13, Ubuntu 23.04/23.10 ja Fedora 37-39. Koodilõike töötamine root-õiguste saamiseks tavalise kasutaja poolt on demonstreeritud täielikult uuendatud Fedora 38 keskkonnas, millel on vaikimisi lubatud kõik kaitsemehhanismid. Haavatavus saab olla ekspluateeritud ainult lokaalselt, kuna see nõuab rohkem kui 1024 baitide edastamist argv[0] parameetri või ident argumendi kaudu openlog() funktsioonis.
Haavatavuse parandamine on lisatud paar tundi tagasi Glibc koodibaasi ja see sisaldub homme ilmuvast Glibc 2.39 uuendusest, koos veel kahe haavatavuse (CVE-2023-6779, CVE-2023-6780) parandamisega, mis mõjutavad ka __vsyslog_internal() füüsikakoodi ja põhjustavad puhverülevoolu. Veelgi enam, Qualys on hoiatanud qsort() funktsiooni rakenduses esinevast puhverülevoolust, mida Glibci arendajad ei pea haavatavuseks, kuna ekspluateerimine eeldab qsorti kutse argumentideks atüüpilise võrdlemise funktsiooni kasutamist, mis tagastab võrreldavate parameetrite erinevuse.
Статус устранения уязвимостей в дистрибутивах можно оценить на данных страницах: Debian, Ubuntu, SUSE, RHEL, Fedora, Arch Linux, Gentoo, Slackware. Протестировать подверженность системы уязвимости можно следующей командой: $ (exec -a «`printf ‘%0128000x’ 1`» /usr/bin/su < /dev/null)
Allikas: opennet.ru
