Izolyatsiya qilingan konteynerdan chiqishga imkon beruvchi v1 guruhlaridagi zaiflik

Izolyatsiya qilingan konteynerlardan qochish uchun ishlatilishi mumkin bo'lgan Linux yadrosida cgroups v2022 resurslarini cheklash mexanizmini amalga oshirishdagi zaiflik (CVE-0492-1) tafsilotlari oshkor qilindi. Muammo Linux yadrosi 2.6.24 dan beri mavjud boʻlib, 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 va 4.9.301 yadro versiyalarida tuzatilgan. Siz ushbu sahifalardagi tarqatishlarda paket yangilanishlari nashrlarini kuzatib borishingiz mumkin: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

Zaiflik reliz_agent fayl ishlovchisidagi mantiqiy xatolik bilan bog‘liq bo‘lib, u ishlov beruvchini to‘liq imtiyozlar bilan ishga tushirishda tegishli tekshiruvlarni o‘tkaza olmaydi. Relizlar_agent fayli guruhdagi jarayon tugatilganda yadro tomonidan bajariladigan dasturni aniqlash uchun ishlatiladi. Ushbu dastur ildiz sifatida ishlaydi va ildiz nomlar maydonidagi barcha "imkoniyatlar" bilan ishlaydi. Relizlar_agent sozlamasiga faqat administrator kirish huquqiga ega deb taxmin qilingan edi, lekin aslida tekshiruvlar ildiz foydalanuvchisiga ruxsat berish bilan cheklangan edi, bu sozlamani konteynerdan yoki administrator huquqlariga ega boʻlmagan ildiz foydalanuvchisi (CAP_SYS_ADMIN) tomonidan oʻzgartirilishini istisno etmasdi. ).

Ilgari, bunday xususiyat zaiflik sifatida qabul qilinmagan bo'lardi, lekin foydalanuvchi nomlari bo'shliqlari (foydalanuvchi nomlari bo'shliqlari) paydo bo'lishi bilan vaziyat o'zgardi, bu sizga konteynerlarda ildiz foydalanuvchilari bilan bir-biriga mos kelmaydigan alohida ildiz foydalanuvchilarini yaratishga imkon beradi. asosiy muhit. Shunga ko'ra, hujum uchun, o'z ildiz foydalanuvchisiga ega bo'lgan konteynerda, jarayonni tugatgandan so'ng, asosiy muhitning to'liq imtiyozlari bilan amalga oshiriladigan alohida foydalanuvchi identifikatori maydoniga reliz_agent ishlov beruvchisini ulash kifoya.

Odatiy bo'lib, cgroupfs konteynerga faqat o'qish rejimida o'rnatiladi, lekin agar sizda CAP_SYS_ADMIN huquqlariga ega bo'lsangiz yoki tizim qo'ng'irog'ini taqsimlashni bekor qilish orqali alohida foydalanuvchi nomi maydoniga ega ichki konteyner yaratsangiz, bu psevdoflarni yozish rejimida qayta o'rnatishda muammo bo'lmaydi. Yaratilgan konteyner uchun CAP_SYS_ADMIN huquqlari mavjud.

Izolyatsiya qilingan konteynerdan chiqishga imkon beruvchi v1 guruhlaridagi zaiflik

Hujum, agar siz izolyatsiya qilingan konteynerda ildiz huquqlariga ega bo'lsangiz yoki no_new_privs bayrog'isiz konteynerni ishga tushirganda amalga oshirilishi mumkin, bu esa qo'shimcha imtiyozlarni olishni taqiqlaydi. Tizim yoqilgan foydalanuvchi nomlari bo'shliqlarini qo'llab-quvvatlashi kerak (Ubuntu va Fedora-da sukut bo'yicha yoqilgan, lekin Debian va RHEL-da faollashtirilmagan) va ildiz cgroup v1 ga kirish huquqiga ega bo'lishi kerak (masalan, Docker ildiz RDMA cgroupdagi konteynerlarni ishga tushiradi). Hujum, agar sizda CAP_SYS_ADMIN imtiyozlariga ega bo'lsangiz ham mumkin, bu holda foydalanuvchi nomlari bo'shliqlarini qo'llab-quvvatlash va cgroup v1 ildiz ierarxiyasiga kirish talab qilinmaydi.

Izolyatsiya qilingan konteynerdan qochishdan tashqari, zaiflik "imkoniyatlari" bo'lmagan ildiz foydalanuvchisi yoki CAP_DAC_OVERRIDE huquqlariga ega bo'lgan har qanday foydalanuvchi tomonidan ishga tushirilgan jarayonlarga ham imkon beradi (hujum /sys/fs/cgroup/*/release_agent fayliga kirishni talab qiladi. ildizga tegishli) barcha tizimli "imkoniyatlarga" kirish uchun.

Qayd etilishicha, Seccomp, AppArmor yoki SELinux himoya mexanizmlaridan konteynerlarni qo‘shimcha izolyatsiyalash uchun foydalanilganda zaiflikdan foydalanib bo‘lmaydi, chunki Seccomp unshare() tizimi chaqiruviga kirishni bloklaydi, AppArmor va SELinux esa yozish rejimida cgroupflarni o‘rnatishga ruxsat bermaydi.

Manba: opennet.ru

a Izoh qo'shish