Faqat o'qish uchun mo'ljallangan fayllarni buzishi mumkin bo'lgan Linux yadrosidagi zaiflik

Linux yadrosida (CVE-2022-0847) zaiflik aniqlandi, bu har qanday fayllar, jumladan, O_RDONLY bayrog'i bilan ochilgan yoki o'rnatilgan fayl tizimlarida joylashgan faqat o'qish rejimidagi fayllar uchun sahifa keshi mazmunini qayta yozish imkonini beradi. faqat o'qish rejimi. Amaliy tomondan, zaiflik o'zboshimchalik bilan jarayonlarga kod kiritish yoki ochilgan fayllardagi ma'lumotlarni buzish uchun ishlatilishi mumkin. Misol uchun, sshd jarayoni uchun avtorizatsiyalangan_keys faylining mazmunini o'zgartirishingiz mumkin. Sinov uchun ekspluatatsiya prototipi mavjud.

2016-yilda aniqlangan Dirty COW muhim zaifligiga o‘xshab, muammoga Dirty Pipe kod nomi berildi. Qayd etilishicha, Dirty Pipe xavfliligi bo‘yicha Dirty COW bilan bir xil darajada, lekin uni ishlatish ancha oson. Zaiflik splice() operatsiyasi yordamida tayyorlangan jurnal serveridan siqilgan arxivlarni (yuklangan tizimda 37 oy ichida 3 ta zarar) yuklab oluvchi tizimda tarmoq orqali yuklab olingan fayllarning davriy shikastlanishi haqidagi shikoyatlarni tahlil qilish jarayonida aniqlangan. va nomsiz quvurlar.

Zaiflik 5.8-yil avgust oyida chiqarilgan Linux 2020 yadrosidan beri namoyon bo'lmoqda, ya'ni. Debian 11 da mavjud, lekin Ubuntu 20.04 LTS da asosiy yadroga ta'sir qilmaydi. RHEL 8.x va openSUSE/SUSE 15 yadrolari dastlab eski filiallarga asoslangan, ammo muammoga sabab boʻlgan oʻzgarishlar ularga qaytarilgan boʻlishi mumkin (hali aniq maʼlumotlar yoʻq). Siz ushbu sahifalarda tarqatmalarda paket yangilanishlarining nashr etilishini kuzatishingiz mumkin: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Zaiflikni tuzatish 5.16.11, 5.15.25 va 5.10.102 versiyalarida taklif qilingan. Tuzatish Android platformasida ishlatiladigan yadroga ham kiritilgan.

Zaiflik, struktura ajratilganda xotira tozalanmaganiga qaramay, copy_page_to_iter_pipe() va push_pipe() funksiyalari kodida “buf->bayroqlar” qiymatining ishga tushirilmaganligi tufayli yuzaga keladi. nomsiz quvurlar bilan manipulyatsiyalar, "buf->bayroqlar" boshqa operatsiya qiymatini o'z ichiga olishi mumkin. Ushbu xususiyatdan foydalangan holda, imtiyozsiz mahalliy foydalanuvchi bayroqdagi PIPE_BUF_FLAG_CAN_MERGE qiymatining ko'rinishiga erishishi mumkin, bu sizga maxsus tayyorlangan nomsiz quvurga (quvurga) yangi ma'lumotlarni yozish orqali sahifa keshidagi ma'lumotlarni qayta yozish imkonini beradi.

Hujum uchun maqsadli fayl o'qilishi kerak va trubaga yozishda kirish huquqlari tekshirilmaganligi sababli, sahifa keshini almashtirish mumkin, shu jumladan faqat o'qish uchun o'rnatilgan bo'limlarda joylashgan fayllar uchun (masalan, c fayllar uchun). CD-ROM). Sahifa keshidagi ma'lumotlarni almashtirgandan so'ng, fayldan ma'lumotlarni o'qish jarayoni haqiqiy emas, balki almashtirilgan ma'lumotlarni oladi.

Amaliyot nomsiz quvur yaratish va u bilan bog'langan barcha halqa tuzilmalarida PIPE_BUF_FLAG_CAN_MERGE bayrog'ini o'rnatishga erishish uchun uni o'zboshimchalik bilan ma'lumotlar bilan to'ldirishdan iborat. Keyinchalik, ma'lumotlar quvurdan o'qiladi, lekin bayroq pipe_inode_info halqa tuzilmalaridagi pipe_buffer strukturasining barcha holatlarida o'rnatilgan bo'lib qoladi. Keyin splice() qo'ng'irog'i kerakli ofsetdan boshlab maqsadli fayldan ma'lumotlarni nomsiz quvurga o'qish uchun amalga oshiriladi. Ushbu nomsiz quvurga ma'lumotlar yozilganda, PIPE_BUF_FLAG_CAN_MERGE bayrog'i pipe_buffer strukturasining yangi nusxasini yaratish o'rniga sahifa keshidagi ma'lumotlarni qayta yozadi.

Manba: opennet.ru

a Izoh qo'shish