Zehfbûna krîtîk di PolKit de ku destûrê dide gihandina root li ser piraniya belavkirinên Linux

Qualys di beşa pergala Polkit (berê PolicyKit) de ku di belavkirinan de tê bikar anîn de qelsiyek (CVE-2021-4034) nas kiriye da ku rê bide bikarhênerên bêdestûr ku karên ku hewceyê mafên gihîştina bilindkirî ne bikin. Qelsî dihêle ku bikarhênerek herêmî ya bêdestûr îmtiyazên xwe zêde bike da ku root bike û bi tevahî kontrola pergalê bigire. Pirsgirêk bi navê kodê PwnKit bû û ji ber hilberîna kargêrek xebitandinê ya ku di veavakirina xwerû de li ser piraniya belavokên Linux-ê dimeşe girîng e.

Pirsgirêk di navgîniya pkexec ya PolKit de heye, ku bi ala root ya SUID tê û ji bo ku emrên bi îmtiyazên bikarhênerek din li gorî qaîdeyên diyarkirî PolKit bimeşîne hatî çêkirin. Ji ber nerastkirina argumanên rêzika fermanê yên ku ji pkexec re derbas bûne, bikarhênerek bêdestûr dikaribû erêkirinê derbas bike û koda xwe wekî root bimeşîne, bêyî ku rêzikên gihîştinê werin danîn. Ji bo êrîşekê, ne girîng e ka kîjan mîheng û sînorkirinên di PolKit-ê de têne destnîşan kirin, bes e ku taybetmendiya root SUID ji bo pelê bikêrhatî bi kargêriya pkexec ve were danîn.

Pkexec rastbûna hejmara argumana rêzika fermanê (argc) ku dema pêvajoyek dest pê dike derbasbûyî kontrol nake. Pêşdebirên pkexec texmîn kirin ku têketina yekem a di rêza argv de her gav navê pêvajoyê (pkeexec) vedihewîne, û ya duyemîn jî nirxek NULL an navê fermana ku bi pkexec ve hatî destpêkirin heye. Ji ber ku jimara argumanan li hember naveroka rastîn a rêzê nehat kontrol kirin û hate texmîn kirin ku her gav ji 1-ê mezintir e, heke pêvajoyek ji rêzek argv vala derbas bibe, wekî ku fonksiyona execve ya Linux destûrê dide, pkexec dê NULL wekî argumana yekem bigire ( navê pêvajoyê) û ya paşîn wekî li derveyî bîranîna tampon, mîna naverokên paşîn ên rêzê. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "bername" "-option" NULL "nirx" "PATH=nav" NULL

Pirsgirêk ev e ku piştî rêzika argv di bîranînê de komek envp heye ku guhêrbarên hawîrdorê vedihewîne. Ji ber vê yekê, heke rêzika argv vala be, pkexec di derheqê fermana ku bi îmtiyazên bilindkirî ve ji hêmana yekem a rêzê ya bi guhêrbarên hawîrdorê re (argv[1] bûye wek envp[0]) daneyan derdixe, naveroka wê dikare were kontrol kirin. ji aliyê êrîşkar ve.

Piştî wergirtina nirxa argv[1], pkexec hewl dide, rêyên pelê yên di PATH de li ber çavan bigire, rêça tevahî ya pelê îcrakar diyar bike û nîşanek li ser rêzê bi riya tevahî vegere argv[1] dinivîse, ku dibe sedema nivîsandina nirxa guhêrbara yekem a hawîrdorê, ji ber ku argv[1] bi envp[0] re yek e. Bi manîpulekirina navê guhêrbara jîngehê ya yekem, êrîşkar dikare di pkexec de guhêrbarek jîngehê ya din biguhezîne, mînakî, guhêrbara jîngehê ya "LD_PRELOAD" ya ku di bernameyên suid de destûr nayê dayîn, bixe şûna xwe, û rê bide ku pirtûkxaneya wan a hevpar di nav de were barkirin. doz.

Kêmasiya xebatê cîgirkirina guhêrbara GCONV_PATH, ya ku ji bo destnîşankirina rêça pirtûkxaneya veguherîna sembolê tê bikar anîn, dema ku fonksiyona g_printerr () bi dînamîk tê barkirin, koda ku iconv_open () bikar tîne, tê barkirin. Bi ji nû ve pênasekirina rê li GCONV_PATH, êrîşkar dikare piştrast bike ku ew ne pirtûkxaneya îconv-ya standard e ku tê barkirin, lê pirtûkxaneya wê ya bixwe ye, gava ku peyamek xeletiyek di qonaxa ku pkexec hîn bi xebitîne were xuyang kirin dê were darve kirin. mafên root û berî destpêkirinê destûr têne kontrol kirin.

Tê destnîşan kirin ku digel vê yekê ku pirsgirêk ji ber xirabûna bîranînê çêdibe jî, bêyî ku mîmariya hardware ya ku tê bikar anîn, ew dikare bi pêbawer û dubare were bikar anîn. Karsaziya amadekirî li ser Ubuntu, Debian, Fedora û CentOS bi serfirazî hate ceribandin, lê dikare li ser belavkirinên din jî were bikar anîn. Kêmasiya orîjînal hîna ji raya giştî re peyda nebûye, ev destnîşan dike ku ew piçûk e û dikare bi hêsanî ji hêla lêkolînerên din ve were afirandin, ji ber vê yekê girîng e ku nûvekirina patchê bi zûtirîn dem li ser pergalên pir-bikarhêner saz bikin. Polkit ji bo pergalên BSD û Solaris jî heye, lê ji bo karanîna li ser wan nehatiye lêkolîn kirin. Tiştê ku tê zanîn ev e ku êrîş nikare li ser OpenBSD were kirin, ji ber ku kernel OpenBSD destûrê nade ku nirxek null argc derbas bibe dema ku execve() tê gotin.

Pirsgirêk ji Gulana 2009-an vir ve heye, ji dema zêdekirina fermana pkexec. Çareserkirina lawaziya PolKit niha wekî patchek heye (tu serbestberdana patchê nehatiye berdan), lê ji ber ku pêşdebirên belavkirinê di pêş de ji pirsgirêkê hatine agahdar kirin, piraniya belavokan nûvekirin di heman demê de bi eşkerekirina agahdariya li ser lawaziyê re weşandin. Pirsgirêk di RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux û Manjaro de rast e. Wekî tedbîrek demkî ji bo astengkirina qelsiyê, hûn dikarin ala root ya SUID ji bernameya /usr/bin/pkeexec ("chmod 0755 /usr/bin/pkeexec") derxînin.



Source: opennet.ru

Add a comment