Осебпазирӣ дар китобхона бо татбиқи асосии алгоритми SHA-3

Ҳангоми татбиқи функсияи хэш-криптографии SHA-3 (Keccak), ки дар бастаи XKCP (eXtended Keccak Code Package) пешниҳод шудааст, осебпазирӣ (CVE-2022-37454) муайян карда шудааст, ки метавонад ҳангоми коркарди баъзе маълумот боиси фаромадани буфер гардад. Мушкилот на аз осебпазирии худи алгоритм, балки аз хатогӣ дар коди татбиқи мушаххаси SHA-3 ба вуҷуд омадааст. Бастаи XKCP ҳамчун амалисозии расмии SHA-3 тавсиф карда мешавад, ки бо саҳми гурӯҳи таҳиягари Keccak таҳия шудааст ва ҳамчун асос барои функсияҳои SHA-3 дар забонҳои гуногуни барномасозӣ истифода мешавад (масалан, рамзи XKCP дар hashlib Python истифода мешавад. модул, бастаи Ruby digest sha3 ва функсияҳои hash_* PHP).

Ба гуфтаи муҳаққиқе, ки мушкилотро муайян кардааст, вай тавонист осебпазириро барои вайрон кардани хосиятҳои криптографии функсияи ҳаш ва пайдо кардани тасвирҳои аввал ва дуюм, инчунин ошкор кардани бархӯрдҳо истифода барад. Илова бар ин, эълон карда шуд, ки эксплоити прототипи сохта мешавад, ки имкон медиҳад код ҳангоми ҳисоб кардани хэши файли махсус тарҳрезӣшуда иҷро шавад. Ин осебпазирӣ инчунин метавонад барои ҳамла ба алгоритмҳои санҷиши имзои рақамӣ, ки SHA-3-ро истифода мебаранд (масалан, Ed448) истифода шавад. Тафсилоти усулҳои ҳамла ба нақша гирифта шудааст, ки баъд аз бартараф кардани осебпазирӣ дар ҳама ҷо нашр карда шаванд.

Ҳанӯз маълум нест, ки осебпазирӣ ба замимаҳои мавҷуда дар амал то чӣ андоза таъсир мерасонад, зеро барои он ки мушкилот дар код зуҳур кунад, бояд ҳисобҳои даврии хэш дар блокҳо истифода шаванд ва яке аз блокҳои коркардшуда бояд тақрибан 4 ГБ андоза бошад (ҳадди ақалл). 2^32 - 200 байт). Ҳангоми коркарди маълумоти воридшуда якбора (бе пай дар пай ҳисоб кардани хэш дар қисмҳо), мушкилот пайдо намешавад. Ҳамчун соддатарин усули муҳофизат, пешниҳод карда мешавад, ки андозаи максималии маълумот дар як итератсияи ҳисобкунии хэш маҳдуд карда шавад.

Ин осебпазирӣ дар натиҷаи хатогӣ дар коркарди блоки додаҳои воридотӣ ба вуҷуд омадааст. Аз сабаби муқоисаи нодурусти арзишҳо бо навъи "int" андозаи нодурусти маълумоти интизорӣ муайян карда мешавад, ки ин боиси навиштани дум аз буфери ҷудошуда мегардад. Аз ҷумла, дар муқоиса ифодаи "partialBlock + instance->byteIOIndex" истифода шудааст, ки боиси фаромадани ададҳо барои арзишҳои калони қисмҳои таркибӣ гардид. Илова бар ин, дар код навъи cast-и нодурусти "(unsigned int)(dataByteLen - i)" мавҷуд буд, ки дар системаҳои навъи 64-битии size_t изофаборро ба вуҷуд овард.

Рамзи намунае, ки боиси зиёдшавӣ мегардад: воридоти hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; м2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) чоп (h.hexdigest())

Манбаъ: opennet.ru

Илова Эзоҳ