Glibc-dan ARMv7 uchun memcpy funktsiyasini amalga oshirishda muhim zaiflik

Cisco xavfsizlik tadqiqotchilari ochilgan tafsilotlar zaifliklar (CVE-2020-6096) 32-bitli ARMv7 platformasi uchun Glibc tomonidan taqdim etilgan memcpy() funksiyasini amalga oshirishda. Muammo imzolangan 32 bitli butun sonlarni boshqaradigan montaj optimallashtirishlaridan foydalanish tufayli nusxa ko'chirilgan maydonning o'lchamini aniqlaydigan parametrning salbiy qiymatlarini noto'g'ri ishlatish natijasida yuzaga keladi. Salbiy o'lchamli ARMv7 tizimlarida memcpy() ga qo'ng'iroq qilish qiymatlarni noto'g'ri taqqoslashga olib keladi va belgilangan bufer chegarasidan tashqarida yoziladi.

Zaiflikdan tajovuzkor o'zgaruvchining manfiy qiymatini shakllantirishni tashkil qilishi mumkin bo'lgan vaziyatda kodni bajarish uchun ishlatilishi mumkin, bu orqali nusxa ko'chirilgan ma'lumotlarning o'lchami uzatiladi (masalan, 2 Gb dan ortiq ma'lumotlarni uzatishda u salbiy bo'ladi. ma'lumotlar, lekin hujum paytida, bufer chegaralaridan tashqariga chiqish uchun kamida 4 GB o'tkazish kerak). Memcpy() funksiyasi ilovalarda keng qo'llaniladi va ARMv7 protsessorlari avtomobil tizimlari, mobil, sanoat, iste'molchi, aloqa va o'rnatilgan qurilmalarda keng tarqalgan bo'lib, ular Bluetooth, HD Radio/DAB, USB, CAN avtobuslari, Wi-Fi va boshqa tashqi ma'lumotlar manbalariga (masalan, kirish ma'lumotlarini o'lcham cheklovlarisiz qabul qiladigan tarmoq orqali kirish mumkin bo'lgan xizmatlar va ilovalarga hujum qilish mumkin).

Misol tariqasida, avtomobil Wi-Fi tarmog'i orqali kirish mumkin bo'lgan avtomobil axborot tizimlariga o'rnatilgan HTTP serveriga hujum qilish uchun ishlaydigan ekspluatatsiyani yaratish mumkin. Tashqi buzg'unchi juda katta GET so'rovini yuborish orqali ushbu serverdagi memcpy zaifligidan foydalanishi va tizimga ildiz kirishiga ega bo'lishi mumkin.

Glibc-dan ARMv7 uchun memcpy funktsiyasini amalga oshirishda muhim zaiflik

32-bitli x86 tizimlarida muammo paydo bo'lmaydi, chunki ushbu arxitektura uchun memcpy ilovasi o'lcham o'zgaruvchisini size_t tipidagi belgisiz butun son qiymati sifatida to'g'ri talqin qiladi (montaj tilida). amalga oshirish ARMv7 uchun u size_t o'rniga imzolangan tamsayı sifatida qaraladi). Tuzatish hozirda mavjud yamoq, bu avgust Glibc 2.32 yangilanishiga kiritiladi.
Tuzatish imzolangan operandlarda (bge va blt) ishlaydigan montaj ko'rsatmalaridan foydalanishni imzosiz analoglar (blo va bhs) bilan almashtirishdan iborat.

Muammo haligacha hal etilmagan Debian 9 va 10 (Debian 8 da ko'rinmaydi), Fedora, Ubuntu, OpenEmbedded, Tizen (glibc tomonidan ishlatiladi). RHEL и SUSE Muammo ta'sir qilmaydi, chunki ular 32-bitli ARMv7 tizimlarini qo'llab-quvvatlamaydi. Android-ga zaiflik ta'sir qilmaydi, chunki u o'zining libc (Bionic) ilovasidan foydalanadi. IN OpenWRT Odatiy bo'lib, aksariyat tuzilmalar Musl-dan foydalanadi, ammo glibc ham omborda mavjud.

Manba: opennet.ru

a Izoh qo'shish