Snap Package Management Toolkit-dagi ildiz zaifligi

Qualys bu yil uchinchi jiddiy zaiflikni aniqladi (CVE-2022-3328) snap-confine yordam dasturi, u SUID ildiz bayrog'i bilan birga keladi va snapd jarayoni tomonidan mustaqil paketlarda tarqatilgan ilovalar uchun bajariladigan muhitni shakllantirish uchun chaqiriladi. snap formatida. Zaiflik mahalliy imtiyozsiz foydalanuvchiga standart Ubuntu konfiguratsiyasida ildiz sifatida kod bajarilishiga erishish imkonini beradi. Muammo snapd 2.57.6 versiyasini chiqarishda hal qilindi. Ubuntu'ning barcha qo'llab-quvvatlanadigan filiallari uchun paket yangilanishlari chiqarildi.

Qizig'i shundaki, ushbu zaiflik fevral oyidagi xuddi shunday zaiflikni snap-confine-da tuzatish jarayonida kiritilgan. Tadqiqotchilar Ubuntu Server 22.04 da ildizga kirishni ta'minlaydigan ishchi ekspluatatsiyani tayyorlashga muvaffaq bo'lishdi, bu esa snap-confine zaifligiga qo'shimcha ravishda ko'p yo'nalishli jarayonda ikkita zaiflikni ham o'z ichiga oladi (CVE-2022-41974, CVE-2022-41973) imtiyozli buyruqlarni o'tkazishda ruxsatlar tekshiruvini chetlab o'tish va ramziy havolalarni xavfsiz ishlatish bilan bog'liq.

Snap-confine-dagi zaiflik /tmp/snap.$SNAP_NAME katalogining egasi tekshirilgandan so'ng, lekin o'rnatish tizimi chaqiruvidan oldin ramziy havola bilan almashtirilishidan himoya qilish uchun qo'shilgan must_mkdir_and_open_with_perms() funksiyasidagi poyga holati tufayli yuzaga keladi. snap formatidagi paket uchun kataloglarni unga ulash uchun chaqiriladi. Qo'shilgan xavfsizlik /tmp/snap.$SNAP_NAME katalogini, agar mavjud bo'lsa va ildiz foydalanuvchiga tegishli bo'lmasa, tasodifiy nom bilan /tmp ichidagi boshqa katalogga o'zgartirishdan iborat edi.

/tmp/snap.$SNAP_NAME katalogining nomini o'zgartirish operatsiyasidan foydalanganda tadqiqotchilar snap-confine snap paketi tarkibining ildizi uchun /tmp/snap.rootfs_XXXXXX katalogini ham yaratishidan foydalanishdi. Nomning "XXXXXX" qismi mkdtemp() tomonidan tasodifiy tanlanadi, lekin "rootfs_XXXXXX" nomli paket sc_instance_name_validate dan o'tishi mumkin (ya'ni $SNAP_NAME "rootfs_XXXXXX" ga o'rnatilishi va keyin nomni o'zgartirish operatsiyasi qayta yozishga olib keladi. snap root bilan /tmp/snap.rootfs_XXXXXX katalogi).

Bir vaqtning o'zida /tmp/snap.rootfs_XXXXXX va /tmp/snap.$SNAP_NAME nomini o'zgartirishga erishish uchun snap-confine-ning ikkita nusxasi ishga tushirildi. Birinchi nusxa /tmp/snap.rootfs_XXXXXX yaratilishi bilanoq jarayon bloklanadi va rootfs_XXXXXX paket nomiga ega ikkinchi nusxa ishga tushadi, bu esa ikkinchi nusxaning /tmp/snap.$SNAP_NAME vaqtinchalik katalogini /tmp/snapga aylantirishga olib keladi. Birinchi instansiyaning .rootfs_XXXXXX ildiz katalogi. Nomini o'zgartirish amalga oshirilgandan so'ng darhol ikkinchi instansiya ishlamay qoldi va /tmp/snap.rootfs_XXXXXX, fevral oyidagi zaiflikdan foydalanishda bo'lgani kabi, poyga holatini manipulyatsiya qilish bilan almashtirildi. O'zgartirishdan so'ng, ijro bloki birinchi navbatda olib tashlandi va tajovuzkorlar snap ildiz katalogini to'liq nazorat qilishdi.

Oxirgi qadam /tmp/snap.rootfs_XXXXXX/tmp simli havolasini yaratish edi, u sc_bootstrap_mount_namespace() funksiyasi tomonidan yoziladigan haqiqiy katalogni /tmp fayl tizimidagi istalgan katalogga bog'lash-o'rnatish uchun ishlatilgan, chunki mount() qo'ng'irog'i quyidagicha bo'ladi. o'rnatishdan oldin symlinks. Bunday o'rnatish AppArmor cheklovlari bilan bloklangan, ammo bu blokirovkani chetlab o'tish uchun ekspluatatsiya multipathd-da ikkita yordamchi zaiflikdan foydalangan.

Manba: opennet.ru

a Izoh qo'shish