Ang kahinaan sa PolKit ay nagbigay-daan sa root access na makuha sa karamihan ng mga distribusyon ng Linux

Kamakailan lamang Mga Qualys naglabas ng balita na ay natukoy ang isang kahinaan (CVE-2021-4034) en bahagi ng system polkit (dating PolicyKit), na ginagamit sa mga distribusyon upang payagan ang mga hindi privileged na user na magsagawa ng mga pagkilos na nangangailangan ng mataas na mga karapatan sa pag-access.

Kakayahang mangyari nagbibigay-daan sa isang walang pribilehiyong lokal na user na itaas ang kanilang mga pribilehiyo sa root user at makakuha ng ganap na kontrol sa system. Ang isyu ay may codenamed na PwnKit at kapansin-pansin para sa paggawa ng isang gumaganang pagsasamantala na tumatakbo sa mga default na setting sa karamihan ng mga distribusyon ng Linux.

Nabanggit na ang problema ay umiiral sa pkexec utility na kasama sa PolKit, na kasama ng SUID root flag at idinisenyo upang magpatakbo ng mga command na may mga pribilehiyo ng ibang mga user ayon sa mga patakaran ng PolKit.

Dahil sa maling paghawak ng mga argumento mula sa command line na ipinasa sa pkexec, a maaaring i-bypass ng hindi privileged user ang pagpapatotoo at patakbuhin ang iyong code bilang root, anuman ang itinatag na mga panuntunan sa pag-access. Para sa isang pag-atake, anuman ang mga setting at paghihigpit na itinakda sa PolKit, sapat na ang SUID root attribute para sa executable file ay nakatakda sa pkexec utility.

Hindi sinusuri ng Pkexec ang tama ng bilang ng mga argumento ng command line (argc) na naipasa kapag nagsimula ng isang proseso. Ipinapalagay ng mga developer ng pkexec na ang unang entry sa array ng argv ay palaging naglalaman ng pangalan ng proseso (pkexec), at ang pangalawang entry ay alinman sa NULL o ang pangalan ng command na pinaandar sa pamamagitan ng pkexec.

Dahil ang bilang ng argumento ay hindi inihambing sa aktwal na mga nilalaman ng array at ipinapalagay na palaging mas malaki kaysa sa 1, kung ang isang walang laman na argv array ay ipinasa sa proseso, na pinapayagan ng execve function ng Linux, ang pkexec ay tinatrato ang NULL bilang ang unang argumento ( proseso pangalan), at ang susunod na kasunod ay wala sa buffer memory, bilang susunod na nilalaman ng array.

Ang problema ay na pagkatapos ng argv array sa memorya ay ang envp array na naglalaman ng environment variables. Kaya, sa isang walang laman na array ng argv, kinukuha ng pkexec ang data tungkol sa command na ipinapatupad na may mataas na mga pribilehiyo mula sa unang elemento ng array na may mga variable sa kapaligiran (ang argv[1] ay naging magkapareho sa envp[0]), na ang nilalaman ay maaaring kontrolin ng ang umaatake.

Nang matanggap ang halagang argv[1], sinusubukan ng pkexec na tukuyin ang buong path sa executable file gamit ang mga path ng file sa PATH at isusulat ang pointer sa string na may buong path pabalik sa argv[1], na humahantong sa pag-overwrit ng value ng unang variable din ng kapaligiran, dahil ang argv[1] ay kapareho ng envp[0]. Sa pamamagitan ng pagmamanipula sa pangalan ng unang environment variable, maaaring palitan ng attacker ang isa pang environment variable sa pkexec, halimbawa, palitan ang "LD_PRELOAD" environment variable, na hindi pinapayagan sa suid programs, at i-load sa proseso ang nakabahaging library nito sa proseso. .

Ang working exploit ay gumagamit ng GCONV_PATH variable substitution, na ginagamit upang matukoy ang path patungo sa library ng transcoding ng simbolo na dynamic na na-load kapag tinawag ang g_printerr() function, na gumagamit ng iconv_open() sa code nito.

Sa pamamagitan ng muling pagtukoy sa path sa GCONV_PATH, maaaring pamahalaan ng attacker na i-load hindi ang normal na iconv library, ngunit ang kanyang sariling library, na ang mga driver ay isasagawa sa panahon ng mensahe ng error sa yugto kung saan ang pkexec ay tumatakbo pa rin bilang root at bago ang pag-verify ng mga pahintulot sa pagsisimula.

Napapansin na, kahit na ang problema ay dahil sa memory corruption, maaari itong mapagkakatiwalaan at paulit-ulit na pinagsamantalahan, anuman ang ginamit na arkitektura ng hardware.

Naghanda ang pagsasamantala matagumpay na nasubok sa Ubuntu, Debian, Fedora at CentOS, ngunit maaari ding gamitin sa iba pang mga distribusyon. Ang orihinal na pagsasamantala ay hindi pa magagamit sa publiko, na nagpapahiwatig na ito ay walang halaga at madaling likhain muli ng ibang mga mananaliksik, kaya mahalagang i-install ang update ng hotfix sa lalong madaling panahon sa mga multi-user system.

Available din ang Polkit para sa mga sistema ng BSD at Solaris, ngunit hindi pa na-explore para sa pagsasamantala. Ang alam ay hindi maaaring gawin ang pag-atake sa OpenBSD, dahil hindi pinapayagan ng OpenBSD kernel ang pagpasa ng null argc value kapag tumatawag sa execve().

Ang problema ay umiikot mula noong Mayo 2009 nang idagdag ang pkexec command. Ang pag-aayos para sa kahinaan sa PolKit ay magagamit pa rin bilang isang patch (ang bersyon ng pag-aayos ay hindi pa nabuo), ngunit dahil ang mga developer ng pamamahagi ay naabisuhan nang maaga tungkol sa problema, karamihan sa mga distribusyon ay naglabas ng isang update sa parehong oras. kaysa sa pagbubunyag ng impormasyon sa kahinaan.

Sa wakas kung interesado kang malaman ang tungkol dito, maaari mong suriin ang mga detalye sa ang sumusunod na link.


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.