Ang kritikal nga kahuyang sa PolKit nga nagtugot sa pag-access sa gamut sa kadaghanan sa mga distribusyon sa Linux

Giila sa Qualys ang usa ka kahuyang (CVE-2021-4034) sa sangkap sa sistema sa Polkit (kanhi PolicyKit) nga gigamit sa mga pag-apod-apod aron tugotan ang mga dili pribilihiyo nga tiggamit sa paghimo sa mga aksyon nga nanginahanglan taas nga mga katungod sa pag-access. Ang pagkahuyang nagtugot sa usa ka dili pribilihiyo nga lokal nga tiggamit sa pagpadako sa ilang mga pribilehiyo sa pag-root ug pagkuha sa hingpit nga kontrol sa sistema. Ang problema gi-codenamed nga PwnKit ug nabantog tungod sa paghimo sa usa ka nagtrabaho nga pagpahimulos nga nagdagan sa default nga pagsumpo sa kadaghanan sa mga distribusyon sa Linux.

Ang problema anaa sa pkexec utility sa PolKit, nga adunay SUID root flag ug gidesinyo sa pagpadagan sa mga command nga adunay mga pribilihiyo sa laing user sumala sa gitakda nga mga lagda sa PolKit. Tungod sa sayop nga pagdumala sa mga argumento sa command line nga gipasa ngadto sa pkexec, ang usa ka walay pribilihiyo nga tiggamit makalaktaw sa authentication ug modagan sa ilang code isip gamut, bisan unsa pa ang gitakda nga mga lagda sa pag-access. Alang sa usa ka pag-atake, dili igsapayan kung unsa nga mga setting ug mga pagdili ang gitakda sa PolKit, igo na nga ang SUID root attribute gitakda alang sa executable file nga adunay pkexec utility.

Ang Pkexec wala magsusi sa kabalido sa command line argument count (argc) nga gipasa sa pagsugod sa usa ka proseso. Ang mga nag-develop sa pkexec nagtuo nga ang una nga entry sa argv array kanunay adunay ngalan sa proseso (pkexec), ug ang ikaduha usa ka NULL nga kantidad o ang ngalan sa command nga gilunsad pinaagi sa pkexec. Tungod kay ang ihap sa argumento wala gisusi batok sa aktuwal nga mga sulod sa array ug gituohan nga kanunay nga labaw sa 1, kung ang usa ka proseso gipasa sa usa ka walay sulod nga argv array, ingon sa gitugot sa Linux execve function, ang pkexec motratar sa NULL isip unang argumento ( ang ngalan sa proseso) ug ang sunod ingon sa gawas sa panumduman sa buffer, sama sa sunod nga mga sulud sa laray. |———+———+——+—————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "programa" "-option" NULL "value" "PATH=name" NULL

Ang problema mao nga pagkahuman sa argv array adunay envp array sa memorya nga adunay mga variable sa palibot. Busa, kung ang argv array walay sulod, ang pkexec mokuha sa datos mahitungod sa command run nga adunay taas nga mga pribilehiyo gikan sa unang elemento sa array nga adunay environment variables (argv[1] nahimong parehas sa envp[0]), ang mga sulod niini mahimong kontrolahon. sa tig-atake.

Pagkadawat sa kantidad sa argv[1], gisulayan sa pkexec, nga gikonsiderar ang mga agianan sa file sa PATH, aron mahibal-an ang tibuuk nga agianan sa executable file ug nagsulat usa ka pointer sa string nga adunay tibuuk nga agianan balik sa argv [1], nga modala ngadto sa overwriting sa bili sa unang environment variable, tungod kay argv[1] susama sa envp[0]. Pinaagi sa pagmaniobra sa ngalan sa unang environment variable, ang tig-atake mahimong mopuli sa laing environment variable sa pkexec, pananglitan, ilisan ang “LD_PRELOAD” environment variable, nga dili tugotan sa suid nga mga programa, ug maghan-ay sa ilang shared library nga ma-load sa proseso.

Ang pagtrabaho nga pagpahimulos naglakip sa pag-ilis sa GCONV_PATH variable, nga gigamit sa pagtino sa dalan sa simbolo transcoding library, dinamikong loaded sa diha nga sa pagtawag sa g_printerr() function, ang code sa nga naggamit iconv_open(). Pinaagi sa pagbag-o sa agianan sa GCONV_PATH, masiguro sa usa ka tig-atake nga dili ang standard nga librarya sa iconv nga gikarga, apan ang kaugalingon nga librarya, ang mga tigdumala kung diin ipatuman kung adunay usa ka mensahe sa sayup nga gipakita sa yugto kung ang pkexec nagpadayon pa. mga katungod sa gamut ug sa wala pa ang pagtugot sa paglansad gisusi.

Namatikdan nga bisan pa sa kamatuoran nga ang problema gipahinabo sa korapsyon sa panumduman, kini mahimong kasaligan ug balikbalik nga mapahimuslan bisan unsa pa ang gigamit nga arkitektura sa hardware. Ang giandam nga pagpahimulos malampuson nga nasulayan sa Ubuntu, Debian, Fedora ug CentOS, apan mahimo usab nga magamit sa ubang mga distribusyon. Ang orihinal nga pagpahimulos dili pa magamit sa publiko, nga nagpakita nga kini gamay ra ug dali nga mabuhat pag-usab sa ubang mga tigdukiduki, mao nga hinungdanon nga i-install ang pag-update sa patch sa labing madali sa mga sistema sa daghang tiggamit. Magamit usab ang Polkit alang sa mga sistema sa BSD ug Solaris, apan wala pa gitun-an alang sa paggamit niini. Ang nahibal-an mao nga ang pag-atake dili mahimo sa OpenBSD, tungod kay ang OpenBSD kernel wala magtugot sa usa ka null argc nga kantidad nga ipasa kung ang execve() gitawag.

Ang problema anaa sukad Mayo 2009, sukad sa pagdugang sa pkexec command. Ang pag-ayo alang sa kahuyang sa PolKit anaa sa pagkakaron isip usa ka patch (walay patch release nga gipagawas), apan tungod kay ang mga developers sa pag-apod-apod gipahibalo daan sa problema, kadaghanan sa mga distribusyon nagpatik sa update dungan sa pagbutyag sa impormasyon mahitungod sa kahuyang. Ang isyu naayo sa RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux ug Manjaro. Isip usa ka temporaryo nga lakang aron babagan ang pagkahuyang, mahimo nimong tangtangon ang SUID root flag gikan sa /usr/bin/pkexec program ("chmod 0755 /usr/bin/pkexec").



Source: opennet.ru

Idugang sa usa ka comment