Gwendid difrifol yn PolKit sy'n caniatáu mynediad gwreiddiau ar y rhan fwyaf o ddosbarthiadau Linux

Mae Qualys wedi nodi bregusrwydd (CVE-2021-4034) yng nghydran system Polkit (PolisiKit gynt) a ddefnyddir mewn dosraniadau i ganiatáu i ddefnyddwyr difreintiedig gyflawni gweithredoedd sy'n gofyn am hawliau mynediad uchel. Mae'r bregusrwydd yn caniatáu i ddefnyddiwr lleol di-freintiedig gynyddu eu breintiau i wreiddio ac ennill rheolaeth lawn o'r system. Rhoddwyd yr enw PwnKit ar y broblem ac mae'n nodedig am gynhyrchu ecsbloetio gweithredol sy'n rhedeg yn y ffurfweddiad rhagosodedig ar y rhan fwyaf o ddosbarthiadau Linux.

Mae'r broblem yn bresennol yn cyfleustodau pkexec PolKit, sy'n dod gyda baner gwraidd SUID ac sydd wedi'i gynllunio i redeg gorchmynion gyda breintiau defnyddiwr arall yn unol â'r rheolau PolKit penodedig. Oherwydd bod dadleuon llinell orchymyn a drosglwyddwyd i pkexec yn cael eu trin yn anghywir, gallai defnyddiwr difreintiedig osgoi'r dilysu a rhedeg ei god fel gwraidd, waeth beth fo'r rheolau mynediad a osodwyd. Ar gyfer ymosodiad, nid oes ots pa osodiadau a chyfyngiadau a nodir yn PolKit, mae'n ddigon bod y priodoledd gwraidd SUID wedi'i osod ar gyfer y ffeil gweithredadwy gyda'r cyfleustodau pkexec.

Nid yw Pkexec yn gwirio dilysrwydd cyfrif dadl y llinell orchymyn (argc) a basiwyd wrth gychwyn proses. Tybiodd datblygwyr pkexec fod y cofnod cyntaf yn yr amrywiaeth argv bob amser yn cynnwys enw'r broses (pkexec), a'r ail naill ai gwerth NULL neu enw'r gorchymyn a lansiwyd trwy pkexec. Gan na wiriwyd cyfrif y ddadl yn erbyn cynnwys gwirioneddol yr arae a thybiwyd ei fod bob amser yn fwy nag 1, pe bai proses yn cael ei phasio arae argv wag, fel y mae swyddogaeth Linux execve yn caniatáu, byddai pkexec yn trin NULL fel y ddadl gyntaf ( enw'r broses) a'r un nesaf fel y tu allan i'r cof byffer, fel cynnwys dilynol yr arae. |———+———+——+————|———+———+—+————| | argv[0] | argv[1] | ... | argv[argc] | amg[0] | amg[1] | ... | amg[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "rhaglen" "-option" NULL "value" "PATH=name" NULL

Y broblem yw, ar ôl yr arae argv, fod yna arae envp yn y cof sy'n cynnwys newidynnau amgylchedd. Felly, os yw'r arae argv yn wag, mae pkexec yn echdynnu data am y rhediad gorchymyn gyda breintiau uwch o elfen gyntaf yr arae gyda newidynnau amgylchedd (daeth argv[1] yn union yr un fath ag amgv[0]), y gellir rheoli ei gynnwys gan yr ymosodwr.

Ar ôl derbyn gwerth argv[1], mae pkexec yn ceisio, gan ystyried y llwybrau ffeil yn PATH, i bennu'r llwybr llawn i'r ffeil gweithredadwy ac yn ysgrifennu pwyntydd i'r llinyn gyda'r llwybr llawn yn ôl i argv[1], sy'n yn arwain at drosysgrifo gwerth y newidyn amgylchedd cyntaf, gan fod argv[ 1] yn union yr un fath ag amg[0]. Trwy drin enw'r newidyn amgylchedd cyntaf, gall ymosodwr amnewid newidyn amgylchedd arall yn pkexec, er enghraifft, rhodder y newidyn amgylchedd “LD_PRELOAD”, na chaniateir mewn rhaglenni siwt, a threfnu i'w lyfrgell a rennir gael ei llwytho i mewn i'r proses.

Mae'r camfanteisio gweithredol yn cynnwys amnewid y newidyn GCONV_PATH, a ddefnyddir i bennu'r llwybr i'r llyfrgell trawsgodio symbolau, wedi'i lwytho'n ddeinamig wrth alw'r ffwythiant g_printerr(), y mae ei god yn defnyddio iconv_open(). Trwy ailddiffinio'r llwybr yn GCONV_PATH, gall ymosodwr sicrhau nad y llyfrgell eiconv safonol sy'n cael ei llwytho, ond ei llyfrgell ei hun, a bydd y trinwyr yn cael eu gweithredu pan fydd neges gwall yn cael ei harddangos ar y cam pan mae pkexec yn dal i redeg gyda hawliau gwraidd a chyn caniatâd lansio yn cael eu gwirio.

Nodir, er gwaethaf y ffaith bod y broblem yn cael ei hachosi gan lygredd cof, gellir ei hecsbloetio'n ddibynadwy ac yn ailadroddus waeth beth fo'r pensaernïaeth caledwedd a ddefnyddir. Mae'r camfanteisio parod wedi'i brofi'n llwyddiannus ar Ubuntu, Debian, Fedora a CentOS, ond gellir ei ddefnyddio hefyd ar ddosbarthiadau eraill. Nid yw'r ecsbloetio gwreiddiol ar gael i'r cyhoedd eto, sy'n dangos ei fod yn ddibwys ac y gellir ei ail-greu'n hawdd gan ymchwilwyr eraill, felly mae'n bwysig gosod y diweddariad clwt cyn gynted â phosibl ar systemau aml-ddefnyddiwr. Mae Polkit hefyd ar gael ar gyfer systemau BSD a Solaris, ond nid yw wedi'i astudio i'w ddefnyddio arnynt. Yr hyn sy'n hysbys yw na ellir cynnal yr ymosodiad ar OpenBSD, gan nad yw'r cnewyllyn OpenBSD yn caniatáu i werth argc null gael ei basio pan elwir execve().

Mae'r broblem wedi bod yn bresennol ers mis Mai 2009, ers ychwanegu'r gorchymyn pkexec. Mae'r atgyweiriad ar gyfer bregusrwydd PolKit ar gael ar hyn o bryd fel clwt (nid oes unrhyw ryddhad darn wedi'i ryddhau), ond ers i ddatblygwyr dosbarthu gael eu hysbysu o'r broblem ymlaen llaw, cyhoeddodd y rhan fwyaf o ddosbarthiadau'r diweddariad ar yr un pryd â datgelu gwybodaeth am y bregusrwydd. Mae'r mater yn sefydlog yn RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux a Manjaro. Fel mesur dros dro i rwystro'r bregusrwydd, gallwch dynnu baner gwraidd SUID o'r rhaglen /usr/bin/pkexec (“chmod 0755 /usr/bin/pkexec”).



Ffynhonnell: opennet.ru

Ychwanegu sylw