Ko'pgina Linux distributivlarida ildizga kirish imkonini beruvchi PolKit-dagi muhim zaiflik

Qualys imtiyozsiz foydalanuvchilarga yuqori kirish huquqlarini talab qiluvchi amallarni bajarishga ruxsat berish uchun tarqatishda foydalaniladigan Polkit (sobiq PolicyKit) tizim komponentida zaiflikni (CVE-2021-4034) aniqladi. Zaiflik imtiyozga ega bo'lmagan mahalliy foydalanuvchiga o'z imtiyozlarini ildiz otish va tizimni to'liq nazorat qilish imkonini beradi. Muammo PwnKit kod nomini oldi va ko'pgina Linux distributivlarida standart konfiguratsiyada ishlaydigan ishchi ekspluatatsiyani ishlab chiqarish bilan ajralib turadi.

Muammo PolKit pkexec yordam dasturida mavjud bo'lib, u SUID ildiz bayrog'i bilan birga keladi va belgilangan PolKit qoidalariga muvofiq boshqa foydalanuvchining imtiyozlari bilan buyruqlarni bajarish uchun mo'ljallangan. Pkexec-ga uzatilgan buyruq qatori argumentlarining noto'g'ri ishlashi tufayli, imtiyozsiz foydalanuvchi autentifikatsiyani chetlab o'tishi va o'rnatilgan kirish qoidalaridan qat'i nazar, o'z kodini ildiz sifatida ishga tushirishi mumkin. Hujum uchun PolKit-da qanday sozlamalar va cheklovlar ko'rsatilganligi muhim emas, pkexec yordam dasturi bilan bajariladigan fayl uchun SUID ildiz atributini o'rnatish kifoya.

Pkexec jarayonni boshlashda topshirilgan buyruq qatori argumentlari sonining (argc) haqiqiyligini tekshirmaydi. Pkexec-ni ishlab chiquvchilar argv massividagi birinchi yozuv har doim jarayon nomini (pkexec), ikkinchisi esa NULL qiymatini yoki pkexec orqali ishga tushirilgan buyruq nomini o'z ichiga oladi deb taxmin qilishdi. Argumentlar soni massivning haqiqiy mazmuniga nisbatan tekshirilmagani va har doim 1 dan katta deb qabul qilinganligi sababli, agar jarayon Linux execve funksiyasi ruxsat berganidek bo‘sh argv massividan o‘tgan bo‘lsa, pkexec NULLni birinchi argument sifatida ko‘radi ( jarayon nomi) va keyingisi bufer xotirasidan tashqaridagi kabi, massivning keyingi mazmuni kabi. |———+———+——+————|———+———+——+————| | argv[0] | argv[1] | ... | argv[argc] | envp[0] | envp[1] | ... | envp[envc] | |—-|—-+—-|—-+——+——|——|—-|—-+—-|—-+——+——|——| VVVVVV "dastur" "-option" NULL "qiymat" "PATH=nom" NULL

Muammo shundaki, argv massividan keyin xotirada muhit o'zgaruvchilari bo'lgan envp massivi mavjud. Shunday qilib, agar argv massivi bo'sh bo'lsa, pkexec kengaytirilgan imtiyozlar bilan ishga tushirilgan buyruq haqidagi ma'lumotlarni muhit o'zgaruvchilari bilan massivning birinchi elementidan chiqaradi (argv[1] envp[0] bilan bir xil bo'ldi), uning mazmuni boshqarilishi mumkin. hujumchi tomonidan.

argv[1] qiymatini olgandan so'ng, pkexec PATH-dagi fayl yo'llarini hisobga olgan holda bajariladigan faylga to'liq yo'lni aniqlashga harakat qiladi va argv[1] ga qaytish to'liq yo'li bilan satrga ko'rsatgich yozadi. argv[1] envp[0] bilan bir xil bo'lgani uchun birinchi muhit o'zgaruvchisi qiymatini qayta yozishga olib keladi. Birinchi muhit o'zgaruvchisining nomini manipulyatsiya qilish orqali tajovuzkor pkexec-da boshqa muhit o'zgaruvchisini almashtirishi mumkin, masalan, suid dasturlarda ruxsat etilmagan "LD_PRELOAD" muhit o'zgaruvchisini o'rniga qo'yishi va o'zlarining umumiy kutubxonasini kompyuterga yuklanishini tartibga solishlari mumkin. jarayon.

Ishchi ekspluatatsiya GCONV_PATH o'zgaruvchisini almashtirishni o'z ichiga oladi, bu o'zgaruvchining kodi iconv_open() dan foydalanadigan g_printerr() funksiyasiga qo'ng'iroq qilishda dinamik ravishda yuklangan belgilarni transkodlash kutubxonasiga yo'lni aniqlash uchun ishlatiladi. GCONV_PATH da yo‘lni qayta belgilash orqali buzg‘unchi yuklangan standart iconv kutubxonasi emas, balki pkexec bilan ishlayotgan bo‘lsa, xato xabari ko‘rsatilganda ishlovchilar bajariladigan o‘zining kutubxonasi ekanligini ta’minlashi mumkin. ildiz huquqlari va ishga tushirishdan oldin ruxsatlar tekshiriladi.

Qayd etilishicha, muammo xotira buzilishidan kelib chiqqan bo‘lsa-da, foydalanilgan apparat arxitekturasidan qat’i nazar, undan ishonchli va qayta-qayta foydalanish mumkin. Tayyorlangan ekspluatatsiya Ubuntu, Debian, Fedora va CentOS-da muvaffaqiyatli sinovdan o'tkazildi, ammo boshqa tarqatishlarda ham foydalanish mumkin. Asl ekspluatatsiya hali ommaga ochiq emas, bu uning ahamiyatsiz ekanligini va boshqa tadqiqotchilar tomonidan osongina qayta yaratilishi mumkinligini ko'rsatadi, shuning uchun yamoq yangilanishini ko'p foydalanuvchili tizimlarga imkon qadar tezroq o'rnatish muhimdir. Polkit BSD tizimlari va Solaris uchun ham mavjud, ammo ulardan foydalanish uchun o'rganilmagan. Ma'lumki, OpenBSD-da hujumni amalga oshirib bo'lmaydi, chunki OpenBSD yadrosi execve() chaqirilganda null argc qiymatini o'tkazishga ruxsat bermaydi.

Muammo 2009 yil may oyidan beri, pkexec buyrug'i qo'shilganidan beri mavjud. PolKit zaifligini tuzatish hozirda yamoq sifatida mavjud (hech qanday yamoq chiqarilmagan), lekin tarqatish ishlab chiquvchilari muammo haqida oldindan xabardor qilinganligi sababli, ko'pchilik distributorlar yangilanishni zaiflik haqidagi ma'lumotni oshkor qilish bilan bir vaqtda nashr etishdi. Muammo RHEL 6/7/8, Debian, Ubuntu, openSUSE, SUSE, Fedora, ALT Linux, ROSA, Gentoo, Void Linux, Arch Linux va Manjaro-da hal qilingan. Zaiflikni blokirovka qilish uchun vaqtinchalik chora sifatida siz /usr/bin/pkexec dasturidan SUID ildiz bayrog'ini olib tashlashingiz mumkin (“chmod 0755 /usr/bin/pkexec”).



Manba: opennet.ru

a Izoh qo'shish