SHA-3 algoritmining asosiy amalga oshirilishi bilan kutubxonadagi zaiflik

XKCP paketida (kengaytirilgan Keccak Code Package) taklif qilingan SHA-3 (Keccak) kriptografik xesh funksiyasini amalga oshirishda zaiflik (CVE-2022-37454) aniqlandi, bu maʼlum maʼlumotlarni qayta ishlash jarayonida buferning toʻlib ketishiga olib kelishi mumkin. formatlangan ma'lumotlar. Muammo algoritmning o'zida zaiflik emas, balki SHA-3 ning ma'lum bir amalga oshirish kodidagi xatolik tufayli yuzaga keladi. XKCP to'plami Keccak ishlab chiqish guruhi tomonidan ishlab chiqilgan va turli dasturlash tillarida SHA-3 funktsiyalari uchun asos sifatida ishlatiladigan SHA-3 ning rasmiy tatbiq etilishi sifatida e'tirof etilgan (masalan, XKCP kodi Python xeshlibida qo'llaniladi. moduli, Ruby digest paketi sha3 va PHP hash_* funksiyalari).

Muammoni aniqlagan tadqiqotchining so‘zlariga ko‘ra, u zaiflikdan xesh-funksiyaning kriptografik xususiyatlarini buzish va birinchi va ikkinchi old tasvirlarni topish, shuningdek, to‘qnashuvlarni aniqlash uchun foydalanishga muvaffaq bo‘lgan. Bundan tashqari, maxsus ishlab chiqilgan fayl xeshini hisoblashda kodni bajarish imkonini beruvchi ekspluatatsiya prototipi yaratilishi e'lon qilindi. Zaiflik SHA-3 dan foydalanadigan raqamli imzoni tekshirish algoritmlariga hujum qilish uchun ham ishlatilishi mumkin (masalan, Ed448). Hujum usullari tafsilotlari zaiflik hamma joyda bartaraf etilgandan so'ng keyinroq e'lon qilinishi rejalashtirilgan.

Zaiflik amalda mavjud ilovalarga qanchalik ta'sir qilishi hali aniq emas, chunki muammo kodda namoyon bo'lishi uchun bloklardagi tsiklik xesh hisoblaridan foydalanish kerak va qayta ishlangan bloklardan biri taxminan 4 GB hajmda bo'lishi kerak (kamida 2^32 - 200 bayt). Kirish ma'lumotlarini bir vaqtning o'zida qayta ishlashda (qismlarda xeshni ketma-ket hisoblamasdan), muammo paydo bo'lmaydi. Himoya qilishning eng oddiy usuli sifatida xeshni hisoblashning bir iteratsiyasida ishtirok etadigan ma'lumotlarning maksimal hajmini cheklash taklif etiladi.

Zaiflik kirish ma'lumotlarini blokirovka qilishda xatolik tufayli yuzaga keladi. Qiymatlarni "int" turi bilan noto'g'ri taqqoslash tufayli kutilayotgan ma'lumotlarning noto'g'ri hajmi aniqlanadi, bu esa ajratilgan buferdan tashqarida dumning yozilishiga olib keladi. Xususan, taqqoslashda "partialBlock + instance->byteIOIndex" iborasi ishlatilgan, bu esa tarkibiy qismlarning katta qiymatlari uchun butun sonlarning to'lib ketishiga olib keldi. Bundan tashqari, kodda noto'g'ri "(unsigned int)(dataByteLen - i)" turi mavjud bo'lib, bu 64 bitli size_t tipidagi tizimlarda to'lib ketishga olib keldi.

To'lib ketishiga olib keladigan kod misoli: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00″ * 4294967295; h.update(m1) h.update(m2) chop (h.hexdigest())

Manba: opennet.ru

a Izoh qo'shish