Kritiska PolKit ievainojamība, kas nodrošina root piekļuvi lielākajai daļai Linux izplatījumu

Qualys ir identificējis ievainojamību (CVE-2021-4034) Polkit (iepriekš PolicyKit) sistēmas komponentā, ko izmanto izplatījumos, lai ļautu nepievilcīgiem lietotājiem veikt darbības, kurām nepieciešamas paaugstinātas piekļuves tiesības. Ievainojamība ļauj vietējam lietotājam, kas nav priviliģēts, palielināt savas privilēģijas, lai piekļūtu saknei un pilnībā kontrolētu sistēmu. Problēma tika nosaukta ar koda nosaukumu PwnKit, un tā ir ievērojama ar to, ka tika radīta darba izmantošana, kas lielākajā daļā Linux izplatījumu darbojas noklusējuma konfigurācijā.

Problēma pastāv PolKit utilītprogrammā pkexec, kas nāk ar SUID saknes karogu un ir paredzēta, lai palaistu komandas ar cita lietotāja privilēģijām saskaņā ar norādītajiem PolKit noteikumiem. Nepareizas apstrādes ar komandrindas argumentiem, kas nodoti pkexec, dēļ nepiederošs lietotājs var apiet autentifikāciju un palaist savu kodu kā root neatkarīgi no iestatītajiem piekļuves noteikumiem. Uzbrukumam nav svarīgi, kādi iestatījumi un ierobežojumi ir norādīti PolKit, pietiek ar to, ka izpildāmajam failam ar pkexec utilītu ir iestatīts SUID saknes atribūts.

Pkexec nepārbauda komandrindas argumentu skaita (argc) derīgumu, kas nodots, uzsākot procesu. Pkexec izstrādātāji pieņēma, ka argv masīva pirmajā ierakstā vienmēr ir procesa nosaukums (pkexec), bet otrajā - NULL vērtība vai komandas nosaukums, kas palaists, izmantojot pkexec. Tā kā argumentu skaits netika pārbaudīts pret faktisko masīva saturu un tika pieņemts, ka tas vienmēr ir lielāks par 1, ja process tika nodots tukšam argv masīvam, kā to atļauj Linux execve funkcija, pkexec uzskatītu NULL kā pirmo argumentu ( procesa nosaukums) un nākamais kā ārpus buferatmiņas, tāpat kā turpmākais masīva saturs. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "programma" "-opcija" NULL "vērtība" "PATH=nosaukums" NULL

Problēma ir tāda, ka pēc argv masīva atmiņā ir envp masīvs, kurā ir vides mainīgie. Tādējādi, ja argv masīvs ir tukšs, pkexec izvelk datus par komandu izpildi ar paaugstinātām privilēģijām no pirmā masīva elementa ar vides mainīgajiem (argv[1] kļuva identisks envp[0]), kura saturu var kontrolēt. uzbrucējs.

Saņemot argv[1] vērtību, pkexec, ņemot vērā faila ceļus PATH, mēģina noteikt pilnu ceļu uz izpildāmo failu un raksta rādītāju uz virkni ar pilnu ceļu atpakaļ uz argv[1], kas noved pie pirmā vides mainīgā vērtības pārrakstīšanas, jo argv[1] ir identisks envp[0]. Manipulējot ar pirmā vides mainīgā nosaukumu, uzbrucējs pkexec var aizstāt ar citu vides mainīgo, piemēram, aizstāt vides mainīgo “LD_PRELOAD”, kas nav atļauts suid programmās, un organizēt koplietotās bibliotēkas ielādi process.

Darba izmantošana ietver mainīgā GCONV_PATH aizstāšanu, ko izmanto, lai noteiktu ceļu uz simbolu pārkodēšanas bibliotēku, kas tiek dinamiski ielādēta, izsaucot funkciju g_printerr(), kuras kods izmanto iconv_open(). Pārdefinējot ceļu GCONV_PATH, uzbrucējs var nodrošināt, ka tiek ielādēta nevis standarta iconv bibliotēka, bet gan sava bibliotēka, kuras apstrādātāji tiks izpildīti, kad tiek parādīts kļūdas ziņojums posmā, kad pkexec joprojām darbojas ar saknes tiesības un pirms palaišanas atļaujas tiek pārbaudītas.

Jāatzīmē, ka, neskatoties uz to, ka problēmu izraisa atmiņas bojājumi, to var droši un atkārtoti izmantot neatkarīgi no izmantotās aparatūras arhitektūras. Sagatavotā izmantošana ir veiksmīgi pārbaudīta Ubuntu, Debian, Fedora un CentOS, taču to var izmantot arī citos izplatījumos. Sākotnējais izlietojums vēl nav publiski pieejams, norādot, ka tas ir mazsvarīgs un citi pētnieki to var viegli izveidot no jauna, tāpēc ir svarīgi pēc iespējas ātrāk instalēt ielāpu atjauninājumu vairāku lietotāju sistēmās. Polkit ir pieejams arī BSD sistēmām un Solaris, taču tas nav pētīts lietošanai tajās. Ir zināms, ka uzbrukumu nevar veikt uz OpenBSD, jo OpenBSD kodols neļauj nodot nulles argc vērtību, kad tiek izsaukta execve().

Problēma pastāv kopš 2009. gada maija, kopš tika pievienota komanda pkexec. PolKit ievainojamības labojums pašlaik ir pieejams kā ielāps (nav izlaists ielāps), taču, tā kā izplatīšanas izstrādātāji tika iepriekš informēti par problēmu, lielākā daļa izplatījumu atjauninājumu publicēja vienlaikus ar informācijas izpaušanu par ievainojamību. Problēma ir novērsta RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux un Manjaro. Kā pagaidu pasākumu ievainojamības bloķēšanai varat noņemt SUID saknes karogu no programmas /usr/bin/pkexec (“chmod 0755 /usr/bin/pkexec”).



Avots: opennet.ru

Pievieno komentāru