Mikilvægt varnarleysi í PolKit sem gerir rótaraðgang í flestum Linux dreifingum kleift

Qualys hefur greint varnarleysi (CVE-2021-4034) í Polkit (áður PolicyKit) kerfishlutanum sem notaður er í dreifingum til að leyfa óforréttindum að framkvæma aðgerðir sem krefjast aukins aðgangsréttar. Varnarleysið gerir notandalausum staðbundnum notanda kleift að auka réttindi sín til að róta og ná fullri stjórn á kerfinu. Vandamálið fékk kóðanafnið PwnKit og er áberandi fyrir að framleiða virka hagnýtingu sem keyrir í sjálfgefna stillingu á flestum Linux dreifingum.

Vandamálið er til staðar í pkexec tólinu frá PolKit, sem kemur með SUID rótfánanum og er hannað til að keyra skipanir með réttindi annars notanda samkvæmt tilgreindum PolKit reglum. Vegna rangrar meðhöndlunar á skipanalínuröksemdum sem sendar voru til pkexec, gæti óforréttur notandi farið framhjá auðkenningu og keyrt kóðann sinn sem rót, óháð aðgangsreglunum sem settar eru. Fyrir árás skiptir ekki máli hvaða stillingar og takmarkanir eru tilgreindar í PolKit, það er nóg að SUID rót eiginleiki sé stilltur fyrir keyrsluskrána með pkexec tólinu.

Pkexec athugar ekki réttmæti skipanalínunnar talningu rifja (argc) sem er samþykkt þegar ferli er hafið. Hönnuðir pkexec gerðu ráð fyrir að fyrsta færslan í argv fylkinu innihaldi alltaf nafn ferlisins (pkexec), og sú seinni annaðhvort NULL gildi eða nafn skipunarinnar sem ræst var í gegnum pkexec. Þar sem fjöldi rifrilda var ekki athugaður á móti raunverulegu innihaldi fylkisins og gert var ráð fyrir að væri alltaf stærra en 1, ef ferli var staðist tómt argv fylki, eins og Linux execve aðgerðin leyfir, myndi pkexec meðhöndla NULL sem fyrstu rök ( ferli nafnsins) og það næsta sem utan biðminni, eins og síðari innihald fylkisins. |———+———+——+—————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "forrit" "-valkostur" NULL "gildi" "PATH=nafn" NULL

Vandamálið er að á eftir argv fylkinu er envp fylki í minni sem inniheldur umhverfisbreytur. Þannig, ef argv fylkið er tómt, dregur pkexec út gögn um skipunina sem keyrt er með auknum réttindum úr fyrsta þætti fylkisins með umhverfisbreytum (argv[1] varð eins og envp[0]), sem hægt er að stjórna innihaldi þeirra. af árásarmanninum.

Eftir að hafa fengið gildi argv[1] reynir pkexec, að teknu tilliti til skráarslóðanna í PATH, að ákvarða alla slóðina að keyrsluskránni og skrifar bendi á strenginn með fullri slóðinni aftur til argv[1], sem leiðir til þess að yfirskrifa gildi fyrstu umhverfisbreytunnar, þar sem argv[ 1] er eins og envp[0]. Með því að vinna með nafn fyrstu umhverfisbreytunnar getur árásarmaður komið í staðinn fyrir aðra umhverfisbreytu í pkexec, til dæmis, skipt út fyrir „LD_PRELOAD“ umhverfisbreytuna, sem er ekki leyfð í suid forritum, og komið því fyrir að sameiginlegt bókasafn þeirra sé hlaðið inn í ferli.

Vinnuafnotin felur í sér að skipta út GCONV_PATH breytunni, sem er notuð til að ákvarða slóðina að táknum umkóðun bókasafnsins, hlaðin á virkan hátt þegar kallað er á g_printerr() aðgerðina, en kóðinn sem notar iconv_open(). Með því að endurskilgreina slóðina í GCONV_PATH getur árásarmaður tryggt að það sé ekki staðlað iconv bókasafnið sem er hlaðið, heldur eigið bókasafn, en meðhöndlarnir verða keyrðir úr því þegar villuboð birtast á því stigi þegar pkexec er enn í gangi með rótarréttindi og áður en ræsingarheimildir eru athugaðar.

Það er tekið fram að þrátt fyrir að vandamálið sé af völdum minnisspillingar er hægt að nýta það á áreiðanlegan og endurtekið hátt óháð því hvaða vélbúnaðararkitektúr er notaður. Tilbúið hetjudáð hefur verið prófað með góðum árangri á Ubuntu, Debian, Fedora og CentOS, en einnig er hægt að nota það á öðrum dreifingum. Upprunalega misnotkunin er ekki enn aðgengileg almenningi, sem gefur til kynna að það sé léttvægt og að aðrir rannsakendur geti auðveldlega endurskapað það, svo það er mikilvægt að setja upp plástursuppfærsluna eins fljótt og auðið er á fjölnotendakerfum. Polkit er einnig fáanlegt fyrir BSD kerfi og Solaris, en hefur ekki verið rannsakað til notkunar á þeim. Það sem er vitað er að ekki er hægt að framkvæma árásina á OpenBSD, þar sem OpenBSD kjarninn leyfir ekki að núll argc gildi fari framhjá þegar execve() er kallað.

Vandamálið hefur verið til staðar síðan í maí 2009, síðan pkexec skipuninni var bætt við. Lagfæringin fyrir PolKit varnarleysið er sem stendur fáanlegt sem plástur (engin plástraútgáfa hefur verið gefin út), en þar sem dreifingarframleiðendum var tilkynnt um vandamálið fyrirfram birtu flestar dreifingar uppfærsluna samtímis birtingu upplýsinga um varnarleysið. Málið er lagað í RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux og Manjaro. Sem tímabundin ráðstöfun til að loka á varnarleysið geturðu fjarlægt SUID rótfánann úr /usr/bin/pkexec forritinu ("chmod 0755 /usr/bin/pkexec").



Heimild: opennet.ru

Bæta við athugasemd