Një cenueshmëri e PolKit lejoi që të fitohej aksesi rrënjësor në shumicën e shpërndarjeve Linux

kohët e fundit Cilët publikoi lajmin se ka identifikuar një cenueshmëri (CVE-2021-4034) en komponenti i sistemit polkit (dikur PolicyKit), i cili përdoret në shpërndarje për të lejuar përdoruesit jo të privilegjuar të kryejnë veprime që kërkojnë të drejta të larta aksesi.

Prekshmëria lejon një përdorues lokal të paprivilegjuar të ngrejë privilegjet e tij tek përdoruesi rrënjë dhe fitoni kontroll të plotë mbi sistemin. Problemi është i koduar me emrin PwnKit dhe është i dukshëm për prodhimin e një shfrytëzimi funksional që funksionon në cilësimet e paracaktuara në shumicën e shpërndarjeve Linux.

Përmendet se problemi ekziston në programin pkexec të përfshirë me PolKit, i cili vjen me flamurin rrënjë SUID dhe është krijuar për të ekzekutuar komanda me privilegjet e përdoruesve të tjerë sipas rregullave të PolKit.

Për shkak të trajtimit të gabuar të argumenteve nga linja komanduese e kaluar në pkexec, a Përdoruesi jo i privilegjuar mund të anashkalojë vërtetimin dhe kodin tuaj të ekzekutohet si rrënjë, pavarësisht nga rregullat e vendosura të aksesit. Për një sulm, pavarësisht se cilat cilësime dhe kufizime janë vendosur në PolKit, mjafton që atributi rrënjësor SUID për skedarin e ekzekutueshëm të vendoset me mjetin pkexec.

Pkexec nuk kontrollon korrektësinë i numërimit të argumenteve të linjës komanduese (argc) të kaluar kur fillon një proces. Zhvilluesit e pkexec supozuan se hyrja e parë në grupin argv përmban gjithmonë emrin e procesit (pkeexec), dhe hyrja e dytë është ose NULL ose emri i komandës së ekzekutuar përmes pkexec.

Meqenëse numërimi i argumenteve nuk u krahasua me përmbajtjen aktuale të grupit dhe supozohej se ishte gjithmonë më i madh se 1, nëse një grup bosh argv i kalohej procesit, të cilin funksioni execve i Linux-it e lejon, pkexec trajtoi NULL si argumentin e parë ( proces emri), dhe tjetra pas jashtë memorjes buffer, si përmbajtja tjetër e grupit.

Problemi është se pas grupit argv në memorie është grupi envp që përmban variablat e mjedisit. Kështu, me një grup bosh argv, pkexec nxjerr të dhënat për komandën që ekzekutohet me privilegje të ngritura nga elementi i parë i grupit me variabla mjedisore (argv[1] u bë identik me envp[0]), përmbajtja e të cilit mund të kontrollohet nga sulmuesi.

Pasi ka marrë vlerën argv[1], pkexec përpiqet të përcaktojë shtegun e plotë drejt skedarit të ekzekutueshëm duke përdorur shtigjet e skedarit në PATH dhe shkruan treguesin në varg me rrugën e plotë mbrapa në argv[1], gjë që çon në mbishkrimin e vlerës të ndryshores së parë të mjedisit gjithashtu, pasi argv[1] është identik me envp[0]. Duke manipuluar emrin e ndryshores së parë të mjedisit, një sulmues mund të zëvendësojë një variabël tjetër të mjedisit në pkexec, për shembull, të zëvendësojë variablin e mjedisit "LD_PRELOAD", i cili nuk lejohet në programet suid, dhe që procesi të ngarkojë bibliotekën e tij të përbashkët në proces. .

Shfrytëzimi i punës përdor zëvendësimin e ndryshores GCONV_PATH, i cili përdoret për të përcaktuar rrugën drejt bibliotekës së transkodimit të simboleve që ngarkohet në mënyrë dinamike kur thirret funksioni g_printerr(), i cili përdor iconv_open() në kodin e tij.

Duke ripërcaktuar shtegun në GCONV_PATH, sulmuesi mund të arrijë të ngarkojë jo bibliotekën normale të iconv, por bibliotekën e tij, drejtuesit e së cilës do të ekzekutohen gjatë mesazhit të gabimit në fazën ku pkexec po ekzekutohet ende si rrënjë dhe përpara verifikimit të lejeve të nisjes.

Shtë vërejtur se, megjithëse problemi është për shkak të dëmtimit të kujtesës, ai mund të shfrytëzohet në mënyrë të besueshme dhe të përsëritur, pavarësisht nga arkitektura e harduerit të përdorur.

Shfrytëzimi i përgatitur testuar me sukses në Ubuntu, Debian, Fedora dhe CentOS, por mund të përdoret edhe në shpërndarje të tjera. Shfrytëzimi origjinal nuk është ende i disponueshëm publikisht, gjë që tregon se është i parëndësishëm dhe mund të rikrijohet lehtësisht nga studiues të tjerë, ndaj është e rëndësishme që të instaloni përditësimin e hotfix sa më shpejt të jetë e mundur në sistemet me shumë përdorues.

Polkit është gjithashtu i disponueshëm për sistemet BSD dhe Solaris, por nuk është eksploruar për shfrytëzim. Ajo që dihet është se sulmi nuk mund të kryhet në OpenBSD, pasi kerneli OpenBSD nuk lejon kalimin e një vlere null argc kur thirret execve().

Problemi ka ekzistuar që nga maji 2009 kur u shtua komanda pkexec. Rregullimi për cenueshmërinë në PolKit është ende i disponueshëm si një rregullim (versioni i rregullimit nuk është formuar), por meqenëse zhvilluesit e shpërndarjes u njoftuan për problemin paraprakisht, shumica e shpërndarjeve lëshuan një përditësim në të njëjtën kohë. sesa zbulimi e informacionit të cenueshmërisë.

Më në fund nëse jeni të interesuar të dini më shumë për të, ju mund të kontrolloni detajet në lidhja e mëposhtme.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.