Ailagbara pataki ni PolKit ngbanilaaye iwọle gbongbo lori ọpọlọpọ awọn pinpin Lainos

Qualys ti ṣe idanimọ ailagbara kan (CVE-2021-4034) ninu paati eto Polkit (eyiti o jẹ PolicyKit) ti a lo ninu awọn ipinpinpin lati gba awọn olumulo ti ko ni anfani lati ṣe awọn iṣe ti o nilo awọn ẹtọ iraye si giga. Ailagbara naa ngbanilaaye olumulo agbegbe ti ko ni anfani lati mu awọn anfani wọn pọ si lati gbongbo ati gba iṣakoso ni kikun ti eto naa. Iṣoro naa jẹ orukọ PwnKit ati pe o jẹ akiyesi fun iṣelọpọ ilokulo ti n ṣiṣẹ ti o nṣiṣẹ ni iṣeto aifọwọyi lori ọpọlọpọ awọn pinpin Lainos.

Iṣoro naa wa ninu ohun elo PolKit's pkexec, eyiti o wa pẹlu asia root SUID ati pe a ṣe apẹrẹ lati ṣiṣe awọn aṣẹ pẹlu awọn anfani ti olumulo miiran ni ibamu si awọn ofin PolKit ti a sọ pato. Nitori mimu aiṣedeede ti awọn ariyanjiyan laini aṣẹ ti o kọja si pkexec, olumulo ti ko ni anfani le fori ijẹrisi ati jẹ ki koodu wọn ṣiṣẹ bi gbongbo, laibikita awọn ofin iwọle ti ṣeto. Fun ikọlu kan, ko ṣe pataki kini awọn eto ati awọn ihamọ ti wa ni pato ni PolKit, o to pe a ti ṣeto abuda root SUID fun faili ṣiṣe pẹlu ohun elo pkexec.

Pkexec ko ṣayẹwo iwulo ti kika ariyanjiyan laini aṣẹ (argc) ti o kọja nigbati o bẹrẹ ilana kan. Awọn olupilẹṣẹ ti pkexec ro pe titẹsi akọkọ ni ọna argv nigbagbogbo ni orukọ ilana naa (pkexec), ati ekeji boya iye NULL tabi orukọ aṣẹ ti a ṣe ifilọlẹ nipasẹ pkexec. Niwọn igba ti a ko ṣayẹwo iṣiro ariyanjiyan lodi si awọn akoonu gangan ti orun ati pe a ro pe o tobi ju 1 nigbagbogbo, ti ilana kan ba kọja ọna argv ṣofo, bi iṣẹ ṣiṣe Linux ti gba laaye, pkexec yoo tọju NULL bi ariyanjiyan akọkọ ( orukọ ilana) ati atẹle bi ita iranti ifipamọ, bii awọn akoonu ti o tẹle ti orun. |———+————+——+————|———+———+——+—————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—--+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "eto" "-option" NULL "iye" "PATH=orukọ" NULL

Iṣoro naa ni pe lẹhin apẹrẹ argv nibẹ ni eto envp kan ninu iranti ti o ni awọn oniyipada ayika. Nitorinaa, ti ọna argv ba ṣofo, pkexec yọkuro data nipa ṣiṣe pipaṣẹ pẹlu awọn anfani ti o ga lati ipin akọkọ ti orun pẹlu awọn oniyipada ayika (argv[1] di aami si envp [0]), akoonu eyiti o le ṣakoso. nipasẹ awọn attacker.

Lẹhin ti o ti gba iye argv [1], pkexec gbiyanju, ni akiyesi awọn ọna faili ni PATH, lati pinnu ọna kikun si faili ti o ṣiṣẹ ati kọwe itọka si okun pẹlu ọna kikun pada si argv[1], eyiti nyorisi ìkọlélórí iye ti akọkọ ayika oniyipada, niwon argv[1] jẹ aami si envp[0]. Nipa ifọwọyi orukọ oniyipada agbegbe akọkọ, ikọlu le paarọ oniyipada ayika miiran ni pkexec, fun apẹẹrẹ, rọpo “LD_PRELOAD” oniyipada ayika, eyiti ko gba laaye ninu awọn eto suid, ati ṣeto fun ile-ikawe pinpin wọn lati kojọpọ sinu ilana.

Iṣiṣẹ nilokulo pẹlu aropo oniyipada GCONV_PATH, eyiti o lo lati pinnu ọna si ile-ikawe transcoding aami, ti kojọpọ ni agbara nigba pipe iṣẹ g_printerr (), koodu eyiti o nlo iconv_open (). Nipa atunkọ ọna ni GCONV_PATH, ikọlu le rii daju pe kii ṣe ile-ikawe iconv boṣewa ti kojọpọ, ṣugbọn ile-ikawe tirẹ, awọn oluṣakoso eyiti yoo ṣee ṣe nigbati ifiranṣẹ aṣiṣe ba han ni ipele nigbati pkexec tun nṣiṣẹ pẹlu awọn ẹtọ gbongbo ati ṣaaju awọn igbanilaaye ifilọlẹ ti ṣayẹwo.

O ṣe akiyesi pe laibikita otitọ pe iṣoro naa jẹ idi nipasẹ ibajẹ iranti, o le jẹ igbẹkẹle ati ilokulo leralera laibikita faaji ohun elo ti a lo. Ilọkuro ti a pese silẹ ti ni idanwo ni aṣeyọri lori Ubuntu, Debian, Fedora ati CentOS, ṣugbọn tun le ṣee lo lori awọn ipinpinpin miiran. Ipilẹṣẹ atilẹba ko tii wa ni gbangba, ti o nfihan pe ko ṣe pataki ati pe o le ni irọrun tun nipasẹ awọn oniwadi miiran, nitorinaa o ṣe pataki lati fi imudojuiwọn alemo sori ẹrọ ni kete bi o ti ṣee lori awọn eto olumulo pupọ. Polkit tun wa fun awọn eto BSD ati Solaris, ṣugbọn ko ti ṣe iwadi fun lilo lori wọn. Ohun ti a mọ ni pe ikọlu ko le ṣee ṣe lori OpenBSD, nitori ekuro OpenBSD ko gba laaye iye argc asan lati kọja nigbati a pe execve ().

Iṣoro naa ti wa lati May 2009, lati afikun ti aṣẹ pkexec. Atunṣe fun ailagbara PolKit wa lọwọlọwọ bi alemo kan (ko si itusilẹ alemo ti a ti tu silẹ), ṣugbọn niwọn igba ti a ti fi leti awọn olupilẹṣẹ pinpin iṣoro naa ni ilosiwaju, ọpọlọpọ awọn pinpin ṣe atẹjade imudojuiwọn ni nigbakannaa pẹlu sisọ alaye nipa ailagbara naa. Ọrọ naa wa titi ni RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Lainos Void, Arch Linux ati Manjaro. Gẹgẹbi iwọn igba diẹ lati ṣe idiwọ ailagbara, o le yọ asia root SUID kuro ninu eto / usr/bin/pkexec (“chmod 0755 / usr/bin/pkexec”).



orisun: opennet.ru

Fi ọrọìwòye kun