XKCP (eXtended Keccak Code Package) paketida taklif qilingan SHA-3 (Keccak) kriptografik xesh funksiyasini amalga oshirishda zaiflik (CVE-2022-37454) aniqlandi. Ushbu zaiflik maxsus formatlangan ma'lumotlarni qayta ishlashda buferning toshib ketishiga olib kelishi mumkin. Muammo algoritmning o'zida emas, balki ma'lum bir SHA-3 amalga oshirish kodidagi xato tufayli yuzaga keladi. XKCP Keccak ishlab chiqish guruhi bilan birgalikda ishlab chiqilgan SHA-3 ning rasmiy amalga oshirilishi sifatida targ'ib qilinadi va turli dasturlash tillarida SHA-3 funktsiyalari uchun asos sifatida ishlatiladi (masalan, XKCP kodi Python hashlib modulida, Ruby digest-sha3 paketida va PHP hash_* funktsiyalarida ishlatiladi).
Muammoni aniqlagan tadqiqotchining so'zlariga ko'ra, ular zaiflikdan foydalanib, xesh funksiyasining kriptografik xususiyatlarini buzish, birinchi va ikkinchi preimagelarni topish va to'qnashuvlarni aniqlash imkoniyatiga ega bo'lishdi. Shuningdek, ular maxsus yaratilgan faylning xeshini hisoblashda kodni bajarishga imkon beruvchi ekspluatatsiya prototipini yaratishni e'lon qilishdi. Zaiflik, shuningdek, SHA-3 dan foydalanadigan raqamli imzoni tekshirish algoritmlariga hujum qilish uchun ham ishlatilishi mumkin (masalan, Ed448). Hujum usullarining tafsilotlari keyinchalik, zaiflik keng miqyosda tuzatilgandan so'ng nashr etilishi rejalashtirilgan.
Ushbu zaiflik amalda mavjud ilovalarga qay darajada ta'sir qilishi noma'lum, chunki muammo yuzaga kelishi uchun kod tsiklik blok xesh hisob-kitoblaridan foydalanishi kerak va qayta ishlangan bloklardan biri taxminan 4 GB hajmda (kamida 2^32 - 200 bayt) bo'lishi kerak. Kiruvchi ma'lumotlarni bir vaqtning o'zida qayta ishlashda (xeshni ketma-ket qismlarga bo'lib hisoblamasdan) muammo o'zini namoyon qilmaydi. Taklif qilingan eng oddiy yumshatish usuli bitta xesh hisoblash iteratsiyasida ishtirok etadigan ma'lumotlarning maksimal hajmini cheklashdir.
Zaiflik kirish ma'lumotlarini blokli qayta ishlashdagi xatolik tufayli yuzaga keladi. Qiymatlarni "int" turi bilan noto'g'ri taqqoslash natijasida qayta ishlanadigan ma'lumotlarning noto'g'ri hajmi aniqlanadi, bu esa ajratilgan buferdan tashqarida quyruq yozuviga olib keladi. Xususan, taqqoslashda "partialBlock + instance->byteIOIndex" ifodasi ishlatilgan, bu komponent qiymatlari katta bo'lganda butun sonning toshib ketishiga olib kelgan. Bundan tashqari, kodda "(unsigned int)(dataByteLen - i)" noto'g'ri tipli translyatsiya mavjud bo'lib, bu 64-bitli size_t turiga ega tizimlarda toshib ketishga olib kelgan.
Toshib ketishga olib keladigan kodga misol: import hashlib h = hashlib.sha3_224() m1 = b»\x00» * 1; m2 = b»\x00» * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())
Manba: opennet.ru
