Linux Netfilter yadro quyi tizimidagi zaiflik

Tarmoq paketlarini filtrlash va o'zgartirish uchun foydalaniladigan Linux yadrosining quyi tizimi Netfilterda zaiflik (CVE-2021-22555) aniqlandi, bu mahalliy foydalanuvchiga tizimda, jumladan, izolyatsiya qilingan konteynerda bo'lganida ham ildiz huquqlariga ega bo'lish imkonini beradi. KASLR, SMAP va SMEP himoya mexanizmlarini chetlab o'tuvchi ekspluatatsiyaning ishchi prototipi sinov uchun tayyorlangan. Zaiflikni aniqlagan tadqiqotchi kCTF klasterida Kubernetes konteynerlarining izolyatsiyasini chetlab o‘tish usulini aniqlagani uchun Googledan 20 XNUMX dollar mukofot oldi.

Muammo 2.6.19 yil avval chiqarilgan yadro 15 dan beri mavjud va IPT_SO_SET_REPLACE va IP6T_SO_SET_REPLACE ishlov beruvchilaridagi xatolik tufayli kelib chiqqan bo‘lib, mos rejimda setsockopt chaqiruvi orqali maxsus formatlangan parametrlarni jo‘natishda bufer to‘lib ketishiga olib keladi. Oddiy sharoitlarda, faqat root foydalanuvchisi compat_setsockopt() ga qo'ng'iroq qilishi mumkin, ammo hujumni amalga oshirish uchun zarur bo'lgan imtiyozlarni foydalanuvchi nomlari bo'shliqlarini qo'llab-quvvatlash yoqilgan tizimlardagi imtiyozsiz foydalanuvchi ham olishi mumkin.

Foydalanuvchi alohida ildiz foydalanuvchisi bilan konteyner yaratishi va u yerdan zaiflikdan foydalanishi mumkin. Masalan, Ubuntu va Fedora’da “foydalanuvchi nomlari bo‘shliqlari” sukut bo‘yicha yoqilgan, lekin Debian va RHEL da yoqilmagan. Zaiflikni tuzatuvchi yamoq 13 aprel kuni Linux yadrosiga qabul qilingan. Paket yangilanishlari allaqachon Debian, Arch Linux va Fedora loyihalari tomonidan yaratilgan. Ubuntu, RHEL va SUSE-da yangilanishlar tayyorlanmoqda.

Muammo xt_compat_target_from_user() funksiyasida 32-bitdan 64-bitli koʻrinishga oʻtkazilgandan soʻng yadro tuzilmalarini saqlashda xotira hajmini notoʻgʻri hisoblash tufayli yuzaga keladi. Xato to'rt null baytni 0x4C ofset bilan chegaralangan ajratilgan buferdan tashqari istalgan pozitsiyaga yozish imkonini beradi. Bu xususiyat ildiz huquqlarini qo'lga kiritish imkonini beruvchi ekspluatatsiya yaratish uchun etarli bo'ldi - msg_msg tuzilmasidagi m_list->keyingi ko'rsatgichni tozalash orqali xotira bo'shatilgandan keyin ma'lumotlarga kirish uchun sharoitlar yaratildi (foydalanishdan keyin bepul), bu keyin msgsnd() tizimi chaqiruvini manipulyatsiya qilish orqali manzillar va boshqa tuzilmalardagi o'zgarishlar haqida ma'lumot olish uchun foydalanilgan.

Manba: opennet.ru

a Izoh qo'shish