Athari kubwa katika PolKit kuruhusu ufikiaji wa mizizi kwenye usambazaji mwingi wa Linux

Qualys ametambua uwezekano wa kuathiriwa (CVE-2021-4034) katika kipengele cha mfumo wa Polkit (zamani PolicyKit) kilichotumiwa katika usambazaji ili kuruhusu watumiaji wasio na haki kutekeleza vitendo vinavyohitaji haki za juu za ufikiaji. Athari hii inamruhusu mtumiaji wa ndani ambaye hajabahatika kuongeza upendeleo wake ili kupata udhibiti kamili wa mfumo. Tatizo lilipewa jina la msimbo la PwnKit na linajulikana kwa kutoa matumizi yanayofanya kazi ambayo yanaendeshwa katika usanidi chaguo-msingi kwenye usambazaji mwingi wa Linux.

Tatizo lipo katika matumizi ya pkexec ya PolKit, ambayo huja na bendera ya mizizi ya SUID na imeundwa kutekeleza amri na haki za mtumiaji mwingine kulingana na sheria maalum za PolKit. Kwa sababu ya ushughulikiaji usio sahihi wa hoja za mstari wa amri zilizopitishwa kwa pkexec, mtumiaji asiye na haki anaweza kukwepa uthibitishaji na kuendesha msimbo wake kama mzizi, bila kujali sheria za ufikiaji zilizowekwa. Kwa shambulio, haijalishi ni mipangilio gani na vikwazo vilivyotajwa katika PolKit, inatosha kwamba sifa ya mizizi ya SUID imewekwa kwa faili inayoweza kutekelezwa na matumizi ya pkexec.

Pkexec haiangalii uhalali wa hesabu ya hoja ya mstari wa amri (argc) iliyopitishwa wakati wa kuanza mchakato. Waendelezaji wa pkexec walidhani kuwa ingizo la kwanza katika safu ya argv daima lina jina la mchakato (pkexec), na la pili ama thamani ya NULL au jina la amri iliyozinduliwa kupitia pkexec. Kwa kuwa hesabu ya hoja haikuangaliwa dhidi ya yaliyomo halisi ya safu na ilichukuliwa kuwa kubwa kila wakati kuliko 1, ikiwa mchakato ulipitishwa safu tupu ya argv, kama utendaji wa utendaji wa Linux unavyoruhusu, pkexec ingechukulia NULL kama hoja ya kwanza ( jina la mchakato) na inayofuata kama nje ya kumbukumbu ya bafa, kama yaliyomo katika safu inayofuata. |———+———+——+—————————+———+———+—————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|———|—-|—-+—-|—-+———+——————| VVVVVV "program" "-option" NULL "thamani" "PATH=name" NULL

Shida ni kwamba baada ya safu ya argv kuna safu ya envp kwenye kumbukumbu iliyo na anuwai za mazingira. Kwa hivyo, ikiwa safu ya argv ni tupu, pkexec hutoa data kuhusu amri inayoendeshwa na marupurupu ya juu kutoka kwa kipengele cha kwanza cha safu na vigezo vya mazingira (argv[1] ikawa sawa na envp[0]), yaliyomo ambayo yanaweza kudhibitiwa. na mshambuliaji.

Baada ya kupokea thamani ya argv[1], pkexec inajaribu, kwa kuzingatia njia za faili katika PATH, kuamua njia kamili ya faili inayoweza kutekelezwa na kuandika pointer kwa kamba na njia kamili ya kurudi kwa argv[1], ambayo husababisha kubatilisha thamani ya utofauti wa mazingira wa kwanza, kwani argv[1] ni sawa na envp[0]. Kwa kuchezea jina la kigezo cha kwanza cha mazingira, mshambulizi anaweza kubadilisha utofauti mwingine wa mazingira katika pkexec, kwa mfano, kubadilisha utofauti wa mazingira wa "LD_PRELOAD", ambao hauruhusiwi katika programu za suid, na kupanga maktaba yao iliyoshirikiwa kupakiwa kwenye mchakato.

Utumiaji wa kufanya kazi unajumuisha kubadilisha kigezo cha GCONV_PATH, ambacho hutumika kubainisha njia ya maktaba ya kupitisha alama, inayopakiwa kwa nguvu wakati wa kupiga chaguo la kukokotoa la g_printerr(), msimbo ambao hutumia iconv_open(). Kwa kufafanua upya njia katika GCONV_PATH, mshambulizi anaweza kuhakikisha kuwa sio maktaba ya kawaida ya iconv inayopakiwa, lakini maktaba yake mwenyewe, vidhibiti ambavyo vitatekelezwa wakati ujumbe wa makosa utaonyeshwa kwenye hatua wakati pkexec bado inafanya kazi na. haki za mizizi na ruhusa kabla ya uzinduzi huangaliwa.

Imeelezwa kuwa pamoja na ukweli kwamba tatizo linasababishwa na uharibifu wa kumbukumbu, inaweza kutumika kwa uaminifu na kurudia bila kujali usanifu wa vifaa vinavyotumiwa. Unyonyaji uliotayarishwa umejaribiwa kwa ufanisi kwenye Ubuntu, Debian, Fedora na CentOS, lakini pia inaweza kutumika kwa usambazaji mwingine. Utumiaji asilia bado haupatikani kwa umma, ikionyesha kuwa ni mdogo na unaweza kuundwa upya kwa urahisi na watafiti wengine, kwa hivyo ni muhimu kusakinisha sasisho la viraka haraka iwezekanavyo kwenye mifumo ya watumiaji wengi. Polkit inapatikana pia kwa mifumo ya BSD na Solaris, lakini haijasomwa kwa matumizi juu yake. Kinachojulikana ni kwamba shambulio hilo haliwezi kutekelezwa kwa OpenBSD, kwani kernel ya OpenBSD hairuhusu thamani ya null argc kupitishwa wakati execve() inaitwa.

Tatizo limekuwepo tangu Mei 2009, tangu kuongezwa kwa amri ya pkexec. Marekebisho ya athari ya PolKit kwa sasa yanapatikana kama kiraka (hakuna toleo la kiraka lililotolewa), lakini kwa kuwa wasanidi programu wa usambazaji waliarifiwa kuhusu tatizo hilo mapema, usambazaji mwingi ulichapisha sasisho wakati huo huo na ufichuzi wa maelezo kuhusu athari. Suala hili limerekebishwa katika RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux na Manjaro. Kama hatua ya muda ya kuzuia athari, unaweza kuondoa alama ya mizizi ya SUID kwenye /usr/bin/pkexec mpango (“chmod 0755 /usr/bin/pkexec”).



Chanzo: opennet.ru

Kuongeza maoni