Rust standart kutubxonasida zaiflik

Rust standart kutubxonasida std::fs::remove_dir_all() funksiyasidagi poyga holati tufayli zaiflik (CVE-2022-21658) aniqlandi. Agar bu funksiya imtiyozli ilovada vaqtinchalik fayllarni oʻchirish uchun ishlatilsa, tajovuzkor odatda oʻchirishga ruxsati boʻlmagan oʻzboshimchalik bilan tizim fayllari va kataloglarni oʻchirib tashlashi mumkin.

Zaiflik kataloglarni rekursiv yo'q qilishdan oldin ramziy havolalarni tekshirishni noto'g'ri amalga oshirish natijasida yuzaga keladi. Simli havolalar kuzatilishini oldini olish o'rniga, remove_dir_all() birinchi navbatda fayl simli havola yoki yo'qligini tekshiradi. Agar havola aniqlangan bo'lsa, u fayl sifatida o'chiriladi va agar u katalog bo'lsa, u holda rekursiv tarkibni o'chirish operatsiyasi chaqiriladi. Muammo shundaki, tekshirish va o'chirish operatsiyasining boshlanishi o'rtasida biroz kechikish mavjud.

Tekshirish allaqachon amalga oshirilgan, ammo o'chirish uchun kataloglarni sanash operatsiyasi hali boshlanmagan bir vaqtda, tajovuzkor katalogni ramziy havola bilan vaqtinchalik fayllar bilan almashtirishi mumkin. Agar u kerakli vaqtda bo'lsa, remove_dir_all() funktsiyasi ramziy havolani katalog sifatida ko'rib chiqadi va havola ko'rsatadigan tarkibni o'chirishni boshlaydi. Hujumning muvaffaqiyati katalogni almashtirishning tanlangan vaqtining to'g'riligiga bog'liq bo'lishiga va birinchi marta to'g'ri lahzani bosish dargumon bo'lishiga qaramay, tajribalar davomida tadqiqotchilar ekspluatatsiyani amalga oshirgandan so'ng takrorlanadigan muvaffaqiyatli hujumga erishishga muvaffaq bo'lishdi. bir necha soniya.

Rustning 1.0.0 dan 1.58.0 gacha boʻlgan barcha versiyalari taʼsir qiladi. Muammo hozircha yamoq shaklida hal qilindi (tuzatish bir necha soat ichida kutilayotgan 1.58.1 versiyasiga kiritiladi). Siz ushbu sahifalarda tarqatishdagi zaiflikning yo'q qilinishini kuzatishingiz mumkin: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Yuqori imtiyozlar bilan ishlaydigan va remove_dir_all funksiyasidan foydalanadigan Rust dasturlarining barcha foydalanuvchilariga Rustni zudlik bilan 1.58.1 versiyasiga yangilash tavsiya etiladi. Qizig'i shundaki, chiqarilgan yamoq barcha tizimlarda muammoni hal qilmaydi; masalan, REDOX OS va macOS ning 10.10 (Yosemite) dan oldingi versiyalarida zaiflik O_NOFOLLOW bayrog'i yo'qligi sababli bloklanmagan, bu esa quyidagi ramziy ma'lumotlarni o'chirib qo'yadi. havolalar.

Manba: opennet.ru

a Izoh qo'shish