PolKiti kriitiline haavatavus, mis võimaldab enamikul Linuxi distributsioonidel juurjuurdepääsu

Qualys on tuvastanud haavatavuse (CVE-2021-4034) Polkiti (endine PolicyKit) süsteemikomponendis, mida kasutatakse distributsioonides, et võimaldada privilegeerimata kasutajatel sooritada toiminguid, mis nõuavad kõrgendatud juurdepääsuõigusi. Haavatavus võimaldab privilegeerimata kohalikul kasutajal oma õigusi juurutada ja süsteemi üle täielikku kontrolli saavutada. Probleemi koodnimetus oli PwnKit ja see on märkimisväärne töötava ärakasutamise poolest, mis töötab enamiku Linuxi distributsioonide vaikekonfiguratsioonis.

Probleem esineb PolKiti pkexeci utiliidis, mis on kaasas SUID-i juurlipuga ja on mõeldud käskude käivitamiseks teise kasutaja õigustega vastavalt määratud PolKiti reeglitele. Pkexecile edastatud käsureaargumentide ebaõige käsitlemise tõttu võib privilegeerimata kasutaja autentimisest mööda minna ja käivitada oma koodi administraatorina, sõltumata määratud juurdepääsureeglitest. Rünnaku jaoks pole vahet, millised sätted ja piirangud on PolKitis määratud, piisab, kui pkexec-i utiliidiga käivitatavale failile määratakse SUID juuratribuut.

Pkexec ei kontrolli protsessi käivitamisel edastatud käsurea argumentide arvu (argc) kehtivust. Pkexeci arendajad eeldasid, et argv massiivi esimene kirje sisaldab alati protsessi nime (pkexec) ja teine ​​kas NULL väärtust või pkexeci kaudu käivitatud käsu nime. Kuna argumentide arvu ei kontrollitud massiivi tegeliku sisuga ja eeldati, et see on alati suurem kui 1, siis kui protsessile edastati tühi argv massiiv, nagu lubab Linuxi execve funktsioon, käsitleb pkexec esimese argumendina NULL-i ( protsessi nimi) ja järgmine väljaspool puhvermälu, nagu massiivi järgnev sisu. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "programm" "-valik" NULL "väärtus" "PATH=nimi" NULL

Probleem on selles, et pärast argv massiivi on mälus keskkonnamuutujaid sisaldav envp massiiv. Seega, kui argv massiiv on tühi, ekstraheerib pkexec kõrgemate õigustega käivitatud käsu kohta andmed massiivi esimesest keskkonnamuutujatega elemendist (argv[1] sai identseks envp[0]-ga), mille sisu saab juhtida ründaja poolt.

Saanud argv[1] väärtuse, proovib pkexec, võttes arvesse PATH-i failiteid, määrata käivitatava faili täieliku tee ja kirjutab kursori stringile, mille täielik tee on tagasi argv[1]-sse, mis viib esimese keskkonnamuutuja väärtuse ülekirjutamiseni, kuna argv[1] on identne envp[0]-ga. Esimese keskkonnamuutuja nimega manipuleerides saab ründaja pkexecis asendada mõne muu keskkonnamuutuja, näiteks asendada keskkonnamuutuja "LD_PRELOAD", mis ei ole suid programmides lubatud, ja korraldada oma jagatud teegi laadimise protsessi.

Tööeksploit hõlmab muutuja GCONV_PATH asendamist, mida kasutatakse sümbolite ümberkodeerimise teegi tee määramiseks, mis laaditakse dünaamiliselt funktsiooni g_printerr() kutsumisel, mille kood kasutab iconv_open(). GCONV_PATH tee uuesti määratledes saab ründaja tagada, et laaditakse mitte standardne iconv-teek, vaid tema enda teek, mille käitlejad käivitatakse veateate kuvamisel etapis, mil pkexec veel töötab juurõigusi ja enne käivitamislubade kontrollimist.

Märgitakse, et hoolimata tõsiasjast, et probleemi põhjustab mälu riknemine, saab seda usaldusväärselt ja korratavalt ära kasutada sõltumata kasutatavast riistvaraarhitektuurist. Ettevalmistatud kasutust on edukalt testitud Ubuntu, Debiani, Fedora ja CentOS-i peal, kuid seda saab kasutada ka teistes distributsioonides. Algne kasutusviis pole veel avalikult saadaval, mis näitab, et see on triviaalne ja teiste uurijate poolt hõlpsasti taasluuatav, mistõttu on oluline installida plaastri värskendus võimalikult kiiresti mitme kasutajaga süsteemidesse. Polkit on saadaval ka BSD-süsteemide ja Solarise jaoks, kuid nende kasutamist pole uuritud. Teada on see, et OpenBSD-le ei saa rünnata, kuna OpenBSD kernel ei luba execve() kutsumisel edastada null argc väärtust.

Probleem on olnud alates 2009. aasta maist, alates käsu pkexec lisamisest. PolKiti haavatavuse parandus on praegu saadaval paigana (plaastri väljalaset pole välja antud), kuid kuna levitajate arendajaid teavitati probleemist eelnevalt, avaldas enamik distributsioone värskenduse samaaegselt haavatavuse kohta teabe avaldamisega. Probleem on lahendatud versioonides RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux ja Manjaro. Ajutise meetmena haavatavuse blokeerimiseks võite eemaldada SUID juurlipu /usr/bin/pkexec programmist ("chmod 0755 /usr/bin/pkexec").



Allikas: opennet.ru

Lisa kommentaar