Qualys tuvastas haavatavuse (CVE-2021-4034) sĂŒsteemikomponendis Polkit (endine PolicyKit), mida kasutatakse jaotustes, et korraldada tegevusi, mis nĂ”uavad kĂ”rgendatud Ă”igusi, mitteprivileegitud kasutajate seas. Haavatavus vĂ”imaldab mitteprivileegitud kohalikul kasutajal oma Ă”igusi tĂ”sta root-kasutajaks ja saada tĂ€ielik kontroll sĂŒsteemi ĂŒle. Probleem sai koodnimeks PwnKit ja on mĂ€rkimisvÀÀrne, kuna sellele on koostatud töötav eksploit, mis töötab vaikeseadistustes enamikus Linuxi jaotustes.
Probleem esineb PolKit'i koostises olevas utiliidis pkexec, mis on varustatud SUID root mĂ€rgiga ja mĂ”eldud kĂ€skude kĂ€itamiseks teise kasutaja Ă”igustes, vastavalt PolKit'i mÀÀratud reeglitele. Vale kĂ€sitlemise tĂ”ttu, mis kĂ€sitleb pkexec'i kĂ€skluse argumente, sai mitteprivileegitud kasutaja mööda autentimist ja saama oma koodi kĂ€ivitada root Ă”igustes, sĂ”ltumata kehtestatud juurdepÀÀsu reeglitest. RĂŒnnaku jaoks ei ole oluline, millised seaded ja piirangud on PolKit'is mÀÀratud, piisab, kui pkexec utiliidi kĂ€itamiseks on mÀÀratud SUID root lip.
Pkexec ei kontrolli kĂ€skluse argumentide arvu (argc), mis edastatakse protsessi kĂ€ivitamisel. Pkexec'i arendajad eeldavad, et massiivi argv esimene kirje sisaldab alati protsessi nime (pkexec) ja teine kas NULL vÀÀrtust vĂ”i pkexec'i kaudu kĂ€itatava kĂ€skluse nime. Kuna argumentide arvu ei kontrollitud vastavuses tegeliku massiivi sisuga ja eeldati, et see on alati suurem kui 1, siis juhul, kui protsessile edastatakse tĂŒhi massiiv argv, mis on lubatud funktsiooniga execve Linuxis, tĂ”lgendas pkexec NULL'i esimesena argumendina (protsessi nime) ja seejĂ€rel jĂ€rgmine mĂ€lu, mis jÀÀb mĂ€lupiiridest vĂ€lja, kui massiivi sisu.
Probleem on selles, et argv massiivile jĂ€rgneb mĂ€lus envp massiiv, mis sisaldab keskkonnamuutujaid. Seega, kui argv massiiv on tĂŒhi, ekstraktib pkexec andmed kĂ”rgendatud Ă”igustega kĂ€itatava kĂ€su kohta esimesest keskkonnamuutujate massiivi elemendist (argv[1] muutub identseks envp[0] -ga), mille sisu vĂ”ib rĂŒndaja kontrollida.
Saades vÀÀrtuse argv[1], proovib pkexec arvestada PATH-s olevate failiteedega, et mÀÀrata tĂ€istee tĂ€idetava faili jaoks ja kirjutada osutaja tĂ€ielikule teele tagasi argv[1] -sse, mis viib esimese keskkonnamuutuja vÀÀrtuste ĂŒlekirjutamiseni, kuna argv[1] on identne envp[0] -ga. Manipuleerides esimese keskkonnamuutuja nimega, vĂ”ib rĂŒndaja asendada pkexec-s teise keskkonnamuutujaga, nĂ€iteks âLD_PRELOADâ, mis ei ole lubatud suid-programmides, ning korraldada oma jagatud teeki laadimist protsessi.
Töörihma eksploidis toimub GCONV_PATH keskkonnamuutuja asendamine, mida kasutatakse sĂŒmbolite ĂŒmberkoodimise teegi teema mÀÀramiseks, mis laaditakse dĂŒnaamiliselt, kui kutsutakse g_printerr() funktsiooni, mille koodis kasutatakse iconv_open() -d. Ămber mÀÀrates GCONV_PATH -s oleva tee, vĂ”ib rĂŒndaja saavutada mitte standardsete iconv teekide, vaid oma teegi laadimise, mille kĂ€itlejad tĂ€idetakse veateate vĂ€ljastamisel, kui pkexec on veel root Ă”igustega ja volituste kontrollimise faasis.
TĂ€heldatakse, et hoolimata sellest, et probleem on pĂ”hjustatud mĂ€lu kahjustamisest, saab seda kindlalt ja kordavalt rakendada sĂ”ltumata kasutatavast riistvara arhitektuurist. Valmistatud exploit on edukalt testitud Ubuntu, Debian, Fedora ja CentOSis, kuid seda saab kasutada ka teistes distributsioonides. Originaalne exploit ei ole praegu avalikult kĂ€ttevĂ”etav, mis viitab sellele, et see on triviaalne ja seda saab kergesti kopeerida teiste teadlaste poolt, seega on mitme kasutajaga sĂŒsteemides oluline, et parandust vĂ€rskendust installitakse vĂ”imalikult kiiresti. Polkit on saadaval ka BSD-sĂŒsteemidele ja Solarisale, kuid nende vĂ”imaluse uurimist ei ole tehtud. Teada on ainult see, et rĂŒnnak OpenBSD-s ei saa toimuda, kuna OpenBSD kernel ei luba execve() kutsumisel nullvÀÀrtuse argc edastamist.
Probleem on olnud olemas alates mai 2009. aastast, mil lisati pkexec kÀsk. PolKit haavatavuse parandamine on praegu saadaval patchina (parandusversioon pole loodud), kuid kuna distributsioonide arendajad olid probleemist eelnevalt teavitatud, on enamus distributsioone avaldanud vÀrskenduse samaaegselt haavatavuse avalikustamisega. Probleem on lahendatud RHEL 6/7/8, Debianis, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux ja Manjaro. Ajutise meetmena haavatavuse blokeerimiseks vÔib eemaldada SUID root lipu programmilt /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec").
Allikas: opennet.ru
