Kriitiline haavatavus PolKit'is, mis võimaldab root-juurdepääsu enamikus Linuxi jaotustes

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
Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster