Qualys kuulutas vĂ€lja haavatavuse (CVE-2021-4034) sĂŒsteemikomponendis Polkit (endine PolicyKit), mida kasutatakse jaotustes madala privileegiga kasutajate tegevuste tĂ€itmiseks, mis nĂ”uavad kĂ”rgemaid Ă”igusi. See haavatavus vĂ”imaldab madala privileegiga kohaliku kasutaja tĂ”sta oma Ă”igused root-kasutajaks ja saada tĂ€ielik kontroll sĂŒsteemi ĂŒle. Probleem sai koodnimeks PwnKit ja on mĂ€rkimisvÀÀrne selle poolest, et töötab vĂ€lja eksploit, mis töötab vaikeseadistuses enamikus Linuxi jaotustes.
Probleem on seotud PolKit'i utiliidiga pkexec, mis jagatakse koos SUID root'i lipuga ja on mĂ”eldud teiste kasutajate privileegidega kĂ€skude kĂ€ivitamiseks vastavalt mÀÀratud PolKit'i reeglitele. Vale argumentide töötlemine pkexec'i kĂ€sureal vĂ”imaldas privileegita kasutajal autentimist ĂŒletada ja oma koodi kĂ€ivitada root'i Ă”igustega, sĂ”ltumata mÀÀratud pÀÀsureeglitest. RĂŒnnaku jaoks ei ole oluline, millised seaded ja piirangud PolKit'is on seatud; piisab, kui pkexec utiliidi kĂ€ivitataval failil on mÀÀratud SUID root'i omadus.
Pkexec ei kontrolli kĂ€surea argumentide (argc) loenduri kehtivust protsessi kĂ€ivitamisel. Pkexeci arendajad eeldasid, et argv massiivi esimene vÀÀrtus sisaldab alati protsessi nime (pkexec) ja teine kas vÀÀrtust NULL vĂ”i pkexec kaudu kĂ€ivitava kĂ€su nime. Kuna argumentide loendurit ei kontrollitud tegeliku massiivi sisu vastu ja eeldati, et see on alati suurem kui 1, siis kui protsessile edastati tĂŒhi argv massiiv, mis on Linuxis funktsiooni execve poolt lubatud, kĂ€sitles pkexec vÀÀrtust NULL esimese argumendina (protsessi nimi) ja jĂ€rgmist vĂ€ljaspool puhversĂŒkkesse asuvat mĂ€lu, kui massiivi sisu. |âââ+âââ+ââ+ââââ|âââ+âââ+ââ+ââââ| | argv[0] | argv[1] | ⊠| argv[argc] | envp[0] | envp[1] | ⊠| envp[envc] | |â-|â-+â-|â-+ââ+ââ|ââ|â-|â-+â-|â-+ââ+ââ|ââ| V V V V V V «program» «-option» NULL «value» «PATH=name» NULL
Probleemiks on see, et argv massiivi jĂ€rel mĂ€lus asub envp massiiv, mis sisaldab keskkonnamuutujate vÀÀrtusi. Seega, kui argv massiiv on tĂŒhi, ekstraktiveerib pkexec kĂ€ivitatava kĂ”rgendatud Ă”igustega kĂ€su andmed keskkonnamuutujate massiivi esimesest elemendist (argv[1] muutub identseks envp[0]-ga), mille sisu vĂ”ib rĂŒndaja kontrollida.
Saades vÀÀrtuse argv[1], proovib pkexec koos PATH-i failiteede arvesse vĂ”tmisel mÀÀrata tĂ€ispika tee tĂ€idetava faili ja kirjutada nĂ€idiku tĂ€ispika tee stringi tagasi argv[1] sisse, mis toob endaga kaasa ka esimese keskkonnamuutuse vÀÀrtuse ĂŒle kirjutamise, kuna argv[1] on identne envp[0-ga]. Manipuleerides esimese keskkonnamuutuja nimega, saab rĂŒndaja asendada pkexec-s teise keskkonnamuutujaga, nĂ€iteks sisestada keskkonnamuutujat «LD_PRELOAD», mis ei ole lubatud suid-programmides, ja korraldada oma jagatud teegi laadimise protsessi.
Töökeskkonnas asendatakse muutuja GCONV_PATH, mida kasutatakse mĂ€rkide kodeerimise teegi tee mÀÀramiseks, mis laaditakse dĂŒnaamiliselt, kui kutsutakse ĂŒles funktsiooni g_printerr(), kus kasutatakse iconv_open(). Ămber mÀÀrates GCONV_PATH tee, saab rĂŒndaja saavutada mitte tavalise iconv teegi laadimise, vaid oma teegi, mille töötlejad kĂ€ivitatakse viga vĂ€ljundamisel, mil pkexec töötab veel root Ă”igustega ja enne kĂ€ivitamise Ă”iguste kontrollimist.
Tavaliselt on probleem, hoolimata sellest, et see on pĂ”hjustatud mĂ€lu kahjustusest, usaldusvÀÀrselt ja korduvasti kasutatav sĂ”ltumata kasutatavast riistvaraarhitektuurist. Valmistatud eksploit on edukalt testitud Ubuntu, Debian, Fedora ja CentOS-s, kuid seda saab kasutada ka teistes jaotustes. Originaaleksploit ei ole endiselt avalikult saadaval, mis viitab sellele, et see on triviaalne ja teised teadlased saavad selle lihtsalt taastada, seetĂ”ttu on mitme kasutajaga sĂŒsteemides oluline vĂ”imalikult kiiresti installida parandusega uuendus. Polkit on samuti saadaval BSD-sĂŒsteemidele ja Solaris'ele, kuid nende puhul ei ole proovitud rĂŒnde vĂ”imet. On teada ainult, et rĂŒnnakut ei saa lĂ€bi viia OpenBSD-s, kuna OpenBSD kern ei luba execve() vĂ€ljakutses nullvÀÀrtuse argc edastamist.
Probleem on olemas alates 2009. aasta maist, mil lisati pkexec kĂ€sk. TĂ”rke parandamine PolKitis on praegu saadaval plaastrina (korrektuurne vĂ€ljalase pole loodud), kuid kuna levitajad olid eelnevalt probleemist teavitatud, on enamik levitajaid avaldanud uuenduse samaaegselt haavatavuse avalikustamisega. Probleem on kĂ”rvaldatud RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux ja Manjaro. Ajutiseks meetmeks haavatavuse blokeerimiseks vĂ”ib eemaldada SUID root lipu programmilt /usr/bin/pkexec (âchmod 0755 /usr/bin/pkexecâ).
Allikas: opennet.ru
