Krityske kwetsberens yn PolKit wêrtroch root-tagong op de measte Linux-distribúsjes mooglik is

Qualys hat in kwetsberens (CVE-2021-4034) identifisearre yn 'e Polkit (earder PolicyKit) systeemkomponint brûkt yn distribúsjes om unprivilegiearre brûkers mooglik te meitsjen aksjes út te fieren dy't ferhege tagongsrjochten nedich binne. De kwetsberens lit in unprivileged lokale brûker har privileezjes eskalearje om te root en folsleine kontrôle fan it systeem te krijen. It probleem waard koadenamme PwnKit en is opmerklik foar it produsearjen fan in wurkjende eksploitaasje dy't rint yn 'e standertkonfiguraasje op de measte Linux-distribúsjes.

It probleem is oanwêzich yn it pkexec-hulpprogramma fan PolKit, dat komt mei de SUID-rootflagge en is ûntworpen om kommando's út te fieren mei de privileezjes fan in oare brûker neffens de oantsjutte PolKit-regels. Troch ferkearde ôfhanneling fan kommandorigelarguminten dy't trochjûn binne oan pkexec, koe in net-befoarrjochte brûker de autentikaasje omgean en har koade as root útfiere, nettsjinsteande de ynstelde tagongsregels. Foar in oanfal makket it net út hokker ynstellings en beheiningen yn PolKit oanjûn binne, it is genôch dat it SUID-root-attribút is ynsteld foar it útfierbere bestân mei it pkexec-hulpprogramma.

Pkexec kontrolearret de jildichheid fan 'e kommandorigelarguminttelling (argc) dy't trochjûn is by it starten fan in proses. De ûntwikkelders fan pkexec oannommen dat de earste yngong yn de argv array altyd befettet de namme fan it proses (pkexec), en de twadde of in NULL wearde of de namme fan it kommando lansearre fia pkexec. Om't it tal arguminten net kontrolearre waard tsjin de eigentlike ynhâld fan 'e array en oannommen waard dat it altyd grutter wie as 1, as in proses in lege argv-array trochjûn waard, lykas de Linux-útfierfunksje it talit, soe pkexec NULL behannelje as it earste argumint ( de prosesnamme) en de folgjende as bûten it bufferûnthâld, lykas de folgjende ynhâld fan 'e array. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "programma" "-opsje" NULL "wearde" "PAD=namme" NULL

It probleem is dat nei de argv-array is der in envp-array yn it ûnthâld mei omjouwingsfariabelen. Dus, as de argv-array leech is, ekstrahearret pkexec gegevens oer it kommando mei ferhege privileezjes út it earste elemint fan 'e array mei omjouwingsfariabelen (argv[1] waard identyk oan envp[0]), wêrfan de ynhâld kin wurde kontroleare troch de oanfaller.

Nei it ûntfangen fan de wearde fan argv[1], besiket pkexec, rekken hâldend mei de bestânspaden yn PATH, it folsleine paad nei it útfierbere bestân te bepalen en skriuwt in oanwizer nei de tekenrige mei it folsleine paad werom nei argv[1], wat liedt ta it oerskriuwen fan de wearde fan 'e earste omjouwingsfariabele, om't argv[1] identyk is oan envp[0]. Troch de namme fan 'e earste omjouwingsfariabele te manipulearjen, kin in oanfaller in oare omjouwingsfariabele ferfange yn pkexec, bygelyks de omjouwingsfariabele "LD_PRELOAD" ferfange, dy't net tastien is yn suid-programma's, en soargje dat har dielde bibleteek laden wurdt yn 'e proses.

De wurkjende eksploitaasje omfettet it ferfangen fan de fariabele GCONV_PATH, dy't brûkt wurdt om it paad nei de bibleteek foar symboaltranskodearring te bepalen, dynamysk laden as de funksje g_printerr () oanroppen wurdt, wêrfan de koade iconv_open () brûkt. Troch it paad yn GCONV_PATH opnij te definiearjen, kin in oanfaller derfoar soargje dat it net de standert iconv-bibleteek is dy't laden wurdt, mar in eigen bibleteek, wêrfan de handlers wurde útfierd as in flaterberjocht werjûn wurdt op it poadium dat pkexec noch rint mei root-rjochten en tagongsrjochten foar lansearring wurde kontrolearre.

It wurdt opmurken dat nettsjinsteande it feit dat it probleem wurdt feroarsake troch ûnthâld korrupsje, it kin betrouber en werhelle eksploitearre nettsjinsteande de brûkte hardware arsjitektuer. De tariede eksploitaasje is mei súkses hifke op Ubuntu, Debian, Fedora en CentOS, mar kin ek brûkt wurde op oare distribúsjes. De orizjinele eksploitaasje is noch net iepenbier beskikber, wat oanjout dat it triviaal is en maklik opnij makke wurde kin troch oare ûndersikers, dus it is wichtich om de patch-fernijing sa gau mooglik te ynstallearjen op systemen mei meardere brûkers. Polkit is ek beskikber foar BSD-systemen en Solaris, mar is net studearre foar gebrûk op har. Wat bekend is, is dat de oanfal net útfierd wurde kin op OpenBSD, om't de OpenBSD-kernel gjin nul argc-wearde trochjaan kin as execve() wurdt oanroppen.

It probleem is oanwêzich sûnt maaie 2009, sûnt de tafoeging fan it pkexec kommando. De fix foar de PolKit-kwetsberens is op it stuit beskikber as patch (gjin patch-release is frijjûn), mar om't distribúsje-ûntwikkelders fan tefoaren op 'e hichte waarden fan it probleem, publisearren de measte distribúsjes de fernijing tagelyk mei it iepenbierjen fan ynformaasje oer de kwetsberens. It probleem is fêst yn RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux en Manjaro. As tydlike maatregel om de kwetsberens te blokkearjen, kinne jo de SUID-rootflagge fuortsmite fan it programma /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec").



Boarne: opennet.ru

Add a comment