Kritika vundebleco en PolKit permesante radikan aliron ĉe la plej multaj Linukso-distribuoj

Qualys identigis vundeblecon (CVE-2021-4034) en la Polkit (antaŭe PolicyKit) sistemkomponento uzita en distribuoj por permesi senprivilegiajn uzantojn fari agojn kiuj postulas altigitajn alirrajtojn. La vundebleco permesas al senprivilegia loka uzanto pligrandigi siajn privilegiojn radiki kaj akiri plenan kontrolon de la sistemo. La problemo estis kodita PwnKit kaj estas rimarkinda pro produktado de funkcia ekspluato, kiu funkcias en la defaŭlta agordo ĉe la plej multaj Linukso-distribuoj.

La problemo ĉeestas en la ilo pkexec de PolKit, kiu venas kun la SUID radika flago kaj estas desegnita por ruli komandojn kun la privilegioj de alia uzanto laŭ la specifitaj PolKit-reguloj. Pro malĝusta uzado de komandliniaj argumentoj transdonitaj al pkexec, senprivilegia uzanto povus preteriri aŭtentigon kaj ruli sian kodon kiel radiko, sendepende de la alirreguloj fiksitaj. Por atako, ne gravas, kiaj agordoj kaj limigoj estas specifitaj en PolKit, sufiĉas, ke la SUID radika atributo estas agordita por la plenumebla dosiero kun la pkexec-utilo.

Pkexec ne kontrolas la validecon de la komandlinia argumenta kalkulo (argc) pasita dum komencado de procezo. La programistoj de pkexec supozis, ke la unua eniro en la argv-tabelo ĉiam enhavas la nomon de la procezo (pkexec), kaj la dua aŭ NULL-valoro aŭ la nomo de la komando lanĉita per pkexec. Ĉar la argumenta kalkulo ne estis kontrolita kontraŭ la reala enhavo de la tabelo kaj estis supozita esti ĉiam pli granda ol 1, se al procezo estus preterpasita malplena argv-tabelo, kiel la Linuksa execve funkcio permesas, pkexec traktus NULL kiel la unuan argumenton ( la proceznomo) kaj la sekva kiel ekster la bufromemoro, kiel la posta enhavo de la tabelo. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "programo" "-opcio" NULL "valoro" "PATH=nomo" NULL

La problemo estas, ke post la argv tabelo estas envp tabelo en memoro enhavanta mediovariablojn. Tiel, se la argv-tabelo estas malplena, pkexec ĉerpas datumojn pri la komando-kuro kun altigitaj privilegioj de la unua elemento de la tabelo kun mediovariabloj (argv[1] iĝis identa al envp[0]), kies enhavo povas esti kontrolita. de la atakanto.

Ricevinte la valoron de argv[1], pkexec provas, konsiderante la dosiervojojn en PATH, determini la plenan vojon al la rulebla dosiero kaj skribas montrilon al la ĉeno kun la plena vojo reen al argv[1], kiu kondukas al anstataŭigo de la valoro de la unua mediovariablo, ĉar argv[1] estas identa al envp[0]. Manipulante la nomon de la unua mediovariablo, atakanto povas anstataŭigi alian mediovariablon en pkexec, ekzemple, anstataŭigi la "LD_PRELOAD" mediovariablon, kiu ne estas permesita en suid programoj, kaj aranĝi ke ilia komuna biblioteko estu ŝarĝita en la procezo.

La funkciado implikas anstataŭigi la variablon GCONV_PATH, kiu estas uzata por determini la vojon al la simbola transkoda biblioteko, dinamike ŝarĝita kiam oni vokas la funkcion g_printerr(), kies kodo uzas iconv_open(). Redifinante la vojon en GCONV_PATH, atakanto povas certigi, ke ĝi estas ŝarĝita ne la norma iconv-biblioteko, sed sia propra biblioteko, kies pritraktiloj estos ekzekutitaj kiam erarmesaĝo estas montrita en la stadio kiam pkexec ankoraŭ funkcias kun. radikrajtoj kaj antaŭ lanĉaj permesoj estas kontrolitaj.

Oni rimarkas, ke malgraŭ la fakto, ke la problemo estas kaŭzita de memorkorupto, ĝi povas esti fidinde kaj ripeteble ekspluatata sendepende de la aparataro arkitekturo uzata. La preta ekspluato estis sukcese provita sur Ubuntu, Debian, Fedora kaj CentOS, sed ankaŭ povas esti uzata ĉe aliaj distribuoj. La originala ekspluatado ankoraŭ ne estas publike havebla, indikante ke ĝi estas bagatela kaj povas esti facile rekreita de aliaj esploristoj, do gravas instali la flikaĵan ĝisdatigon kiel eble plej baldaŭ en pluruzantaj sistemoj. Polkit ankaŭ estas havebla por BSD-sistemoj kaj Solaris, sed ne estis studita por uzo sur ili. Kio estas konata estas ke la atako ne povas esti farita sur OpenBSD, ĉar la OpenBSD-kerno ne permesas nulan argc-valoron esti pasita kiam execve() estas vokita.

La problemo ĉeestas ekde majo 2009, ekde la aldono de la komando pkexec. La riparo por la vundebleco de PolKit estas nuntempe havebla kiel flikaĵo (neniu flikaĵeldono estis liberigita), sed ĉar distribuoprogramistoj anticipe estis sciigitaj pri la problemo, plej multaj distribuoj publikigis la ĝisdatigon samtempe kun la malkaŝo de informoj pri la vundebleco. La problemo estas riparita en RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linukso, ROSA, Gentoo, Void Linux, Arch Linux kaj Manjaro. Kiel provizora mezuro por bloki la vundeblecon, vi povas forigi la SUID-radikan flagon de la programo /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec").



fonto: opennet.ru

Aldoni komenton