Alvarlegur veikleiki í PolKit veitir root-aðgang að flestum dreifingum. Linux

Qualys hefur bent á veikleika (CVE-2021-4034) í kerfishluta Polkit (áður PolicyKit), sem er notaður í dreifingum til að gera óréttindalausum notendum kleift að framkvæma aðgerðir sem krefjast aukinna aðgangsréttinda. Veikleikinn gerir óréttindalausum staðbundnum notanda kleift að auka réttindi sín í rótarkerfi og fá fulla stjórn á kerfinu. Vandamálið, sem hefur dulnefnið PwnKit, er þekkt fyrir þróun virkrar gagnaverndar sem virkar í sjálfgefnum stillingum í flestum dreifingum. Linux.

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 kannar ekki gildi skipanalínufæribreytutalningarinnar (argc) sem send er þegar ferli er ræst. Þróunaraðilar pkexec gerðu ráð fyrir að fyrsta færslan í argv fylkinu innihélt alltaf heiti ferlisins (pkexec), og sú seinni væri annað hvort NULL eða nafn skipunarinnar sem ræst var með pkexec. Þar sem færslan var ekki borin saman við raunverulegt innihald fylkisins og gert var ráð fyrir að hún væri alltaf stærri en 1, ef tómt argv fylki var sent til ferlisins, sem er leyfilegt með execve fallinu í Linux, pkexec meðhöndlaði NULL sem fyrsta breytan (nafn ferlisins) og minnið á eftir enda biðminnisins sem restina af fylkinu. |———+———+———+————|———+———+——+———| | argv[0] | argv[1] | … | argv[argc] | envp[0] | envp[1] | … | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "forrit" "-valkostur" NULL "gildi" "Slóð=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ð stafi af minnisskemmdum er hægt að nýta það áreiðanlega og endurtekið óháð því hvaða vélbúnaðararkitektúr er notaður. Undirbúið nýtingabrot var prófað með góðum árangri í Ubuntu, Debian, Fedora og CentOS, en er einnig hægt að nota í öðrum dreifingum. Upprunalega árásin er ekki enn aðgengileg opinberlega, sem bendir til þess að hún sé einföld og að aðrir vísindamenn geti auðveldlega endurskapað hana. Þess vegna er mikilvægt að setja upp lagfæringuna eins fljótt og auðið er á fjölnotendakerfi. Polkit er einnig fáanlegt fyrir BSD kerfi og Solaris, en árás á þeim hefur ekki verið rannsökuð. Það er aðeins vitað að ekki er hægt að framkvæma árásina á OpenBSD, þar sem kjarninn í OpenBSD leyfir ekki að núll argc gildi sé sent í execve() kallið.

Vandamálið hefur verið til staðar síðan í maí 2009, þegar pkexec skipunin var bætt við. Lagfæring á veikleikanum í PolKit er nú fáanleg sem uppfærsla (engin leiðréttingarútgáfa hefur verið gefin út), en þar sem forritarar dreifingarinnar voru látnir vita af vandamálinu fyrirfram, birtu flestar dreifingar uppfærslu samtímis upplýsingunum um veikleikana. Vandamálið er lagað í RHEL 6/7/8. Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Ógild Linux, Bogi Linux og Manjaro. Sem tímabundna ráðstöfun til að loka fyrir veikleikann er hægt að fjarlægja SUID rótarflaggann úr /usr/bin/pkexec forritinu ("chmod 0755 /usr/bin/pkexec").



Heimild: opennet.ru
Kauptu áreiðanlega hýsingu fyrir síður með DDoS vernd, VPS VDS netþjónum 🔥 Kauptu áreiðanlega vefhýsingu með DDoS vörn, VPS VDS netþjónum | ProHoster