ʻO ka nāwaliwali koʻikoʻi ma PolKit e ʻae ana i ke aʻa i ka hapa nui o nā māhele Linux

Ua ʻike ʻo Qualys i kahi nāwaliwali (CVE-2021-4034) i loko o ka ʻōnaehana Polkit (ʻo PolicyKit ma mua) i hoʻohana ʻia i ka hāʻawi ʻana e ʻae i nā mea hoʻohana pono ʻole e hana i nā hana e koi ai i nā kuleana komo kiʻekiʻe. Hāʻawi ka nāwaliwali i kahi mea hoʻohana kūloko pono ʻole e hoʻonui i ko lākou mau pono e aʻa a loaʻa ka mana piha o ka ʻōnaehana. Ua kapa ʻia ka pilikia ʻo PwnKit a kaulana no ka hana ʻana i kahi hana hana e holo nei i ka hoʻonohonoho paʻamau ma ka hapa nui o nā māhele Linux.

Aia ka pilikia i loko o ka pono pkexec o PolKit, i hele mai me ka hae aʻa SUID a ua hoʻolālā ʻia e holo i nā kauoha me nā pono o kekahi mea hoʻohana e like me nā lula PolKit i kuhikuhi ʻia. Ma muli o ka lawelawe hewa ʻole ʻana i nā manaʻo hoʻopaʻapaʻa laina kauoha i hāʻawi ʻia iā pkexec, hiki i kahi mea hoʻohana pono ʻole ke kāpae i ka hōʻoia ʻana a holo i kā lākou code ma ke ʻano he kumu, me ka nānā ʻole i nā lula komo. No ka hoʻouka ʻana, ʻaʻole ia he mea pili i nā hoʻonohonoho a me nā palena i kuhikuhi ʻia ma PolKit, ua lawa ka hoʻonohonoho ʻana o ke kumu aʻa SUID no ka faila hoʻokō me ka pono pkexec.

ʻAʻole nānā ʻo Pkexec i ka pono o ka helu hoʻopaʻapaʻa laina kauoha (argc) i hala i ka wā e hoʻomaka ai i kahi kaʻina hana. Ua manaʻo ka poʻe hoʻomohala o pkexec ʻo ka helu mua o ka argv array ka inoa o ke kaʻina hana (pkexec), a ʻo ka lua he waiwai NULL a i ʻole ka inoa o ke kauoha i hoʻokuʻu ʻia ma o pkexec. No ka mea ʻaʻole i nānā ʻia ka helu hoʻopaʻapaʻa e kūʻē i nā ʻike maoli o ka array a ua manaʻo ʻia ʻoi aku ka nui ma mua o 1, inā ua hoʻoholo ʻia kahi kaʻina hana i kahi array argv kaawale, e like me ka ʻae ʻana o ka Linux execve hana, e mālama ʻo pkexec iā NULL ma ke ʻano he kumu mua ( ka inoa kaʻina hana) a ʻo ka mea aʻe ma waho o ka hoʻomanaʻo buffer, e like me nā mea ma hope o ka array. |———+———+——+—————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "polokalamu" "-koho" NULL "waiwai" "PATH=inoa" NULL

ʻO ka pilikia ma hope o ka argv array aia kahi envp array i loko o ka hoʻomanaʻo i loaʻa nā ʻano hoʻololi kaiapuni. No laila, inā nele ka argv array, unuhi ka pkexec i ka ʻikepili e pili ana i ke kauoha holo me nā pono kiʻekiʻe mai ka mea mua o ka array me nā ʻano hoʻololi kaiapuni (argv[1] i like me envp[0]), hiki ke mālama ʻia nā mea i loko. e ka mea hoouka.

I ka loaʻa ʻana o ka waiwai o argv[1], hoʻāʻo ʻo pkexec, me ka noʻonoʻo ʻana i nā ala faila ma PATH, e hoʻoholo i ke ala piha i ka faila hoʻokō a kākau i kahi kuhikuhi i ke kaula me ke ala piha e hoʻi i argv[1], ka mea. alakaʻi i ke kākau ʻana i ka waiwai o ka hoʻololi kaiapuni mua, no ka mea, ua like ka argv[1] me envp[0]. Ma ka hoʻololi ʻana i ka inoa o ka mea hoʻololi kaiapuni mua, hiki i ka mea hoʻouka ke hoʻololi i kahi ʻano hoʻololi kaiapuni ʻē aʻe i pkexec, no ka laʻana, hoʻololi i ka "LD_PRELOAD" ʻano hoʻololi kaiapuni, ʻaʻole i ʻae ʻia i nā polokalamu suid, a hoʻonohonoho i kā lākou waihona waihona e hoʻouka ʻia i loko o ka waihona. kaʻina hana.

ʻO ka hoʻohana hana e hoʻololi i ka GCONV_PATH variable, i hoʻohana ʻia no ka hoʻoholo ʻana i ke ala i ka waihona transcoding hōʻailona, ​​i hoʻouka ikaika ʻia i ke kāhea ʻana i ka hana g_printerr(), ʻo ia ka code e hoʻohana ai i ka iconv_open(). Ma ka wehewehe hou ʻana i ke ala ma GCONV_PATH, hiki i ka mea hoʻouka ke hōʻoia ʻaʻole ʻo ia ka waihona iconv maʻamau i hoʻouka ʻia, akā ʻo kāna waihona ponoʻī, nā mea lawelawe e hoʻokō ʻia i ka wā e hōʻike ʻia ai kahi leka hewa ma ke kahua i ka wā e holo mau ana ka pkexec me. nā kuleana kumu a ma mua o ka hoʻomaka ʻana e nānā ʻia nā ʻae.

Hoʻomaopopo ʻia ʻoiai ʻo ka pilikia ma muli o ka palaho hoʻomanaʻo, hiki ke hilinaʻi ʻia a hoʻohana pinepine ʻia me ka nānā ʻole ʻana i ka hoʻolālā ʻenehana i hoʻohana ʻia. Ua hoʻāʻo maikaʻi ʻia ka hana i hoʻomākaukau ʻia ma Ubuntu, Debian, Fedora a me CentOS, akā hiki ke hoʻohana ʻia ma nā māhele ʻē aʻe. ʻAʻole i loaʻa i ka lehulehu ka hoʻohana mua ʻana, e hōʻike ana he mea liʻiliʻi a hiki ke hana hou ʻia e nā mea noiʻi ʻē aʻe, no laila he mea nui e hoʻokomo i ka hoʻopou hou i ka wā hiki i nā ʻōnaehana hoʻohana lehulehu. Loaʻa ʻia ʻo Polkit no nā ʻōnaehana BSD a me Solaris, akā ʻaʻole i aʻo ʻia no ka hoʻohana ʻana iā lākou. ʻO ka mea i ʻike ʻia ʻaʻole hiki ke hoʻokō ʻia ka hoʻouka ʻana ma OpenBSD, no ka mea, ʻaʻole ʻae ka OpenBSD kernel i kahi waiwai argc null i ka wā i kāhea ʻia ai execve().

Aia ka pilikia mai Mei 2009, mai ka hoʻohui ʻana o ke kauoha pkexec. Loaʻa ka hoʻoponopono no ka nāwaliwali o PolKit i kēia manawa ma ke ʻano he patch (ʻaʻole i hoʻokuʻu ʻia ka hoʻokuʻu ʻia ʻana), akā ma muli o ka hoʻolaha ʻana o nā mea hoʻolaha hoʻolaha i ka pilikia ma mua, ua paʻi ka hapa nui o ka hoʻolaha i ka manawa like me ka hōʻike ʻana i ka ʻike e pili ana i ka nāwaliwali. Hoʻopaʻa ʻia ka pilikia ma RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux a me Manjaro. Ma ke ʻano he manawa pōkole e pale ai i ka nāwaliwali, hiki iā ʻoe ke wehe i ka hae aʻa SUID mai ka papahana /usr/bin/pkexec ("chmod 0755 /usr/bin/pkexec").



Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka