Ahultasun bat (CVE-2022-37454) identifikatu da XKCP (eXtended Keccak Code Package) paketean eskaintzen den SHA-3 (Keccak) hash funtzio kriptografikoaren inplementazioan. Ahultasun honek buffer gainezka egitea eragin dezake formatu bereziko datuak prozesatzean. Arazoa SHA-3 inplementazio espezifikoaren kodean dagoen akats batek eragiten du, ez algoritmoan bertan dagoen ahultasun batek. XKCP SHA-3ren inplementazio ofizial gisa sustatzen da, Keccak garapen taldearekin garatua, eta SHA-3 funtzioen oinarri gisa erabiltzen da hainbat programazio-lengoaietan (adibidez, XKCP kodea Python hashlib moduluan, Ruby digest-sha3 paketean eta PHP hash_* funtzioetan erabiltzen da).
Arazoa aurkitu zuen ikertzailearen arabera, ahultasuna ustiatu ahal izan zuten hash funtzioaren propietate kriptografikoak urratzeko, lehen eta bigarren aurre-irudiak aurkitzeko eta talkak detektatzeko. Era berean, prototipo baten ustiapena iragarri zuten, bereziki landutako fitxategi baten hasha kalkulatzean kodea exekutatzea ahalbidetzen duena. Ahultasuna SHA-3 erabiltzen duten sinadura digitalen egiaztapen algoritmoak erasotzeko ere erabil liteke (adibidez, Ed448). Eraso-metodoen xehetasunak geroago argitaratzea aurreikusten da, ahultasuna konpondu ondoren.
Ahultasun honek praktikan dauden aplikazioei zenbateraino eragiten dien ez dago argi, arazoa agertzeko kodeak bloke-hash kalkulu ziklikoak erabili behar baititu, eta prozesatutako bloke batek gutxi gorabehera 4 GB-ko tamaina izan behar baitu (gutxienez 2^32 - 200 byte). Sarrerako datuak aldi berean prozesatzean (hasha zatika sekuentzialki kalkulatu gabe), arazoa ez da agertzen. Proposatutako arintze-metodo sinpleena hash kalkulu-iterazio bakarrean parte hartzen duten datuen gehienezko tamaina mugatzea da.
Ahultasuna sarrerako datuen bloke-prozesamenduan izandako errore batek eragiten du. "int" motarekin balioak gaizki alderatu direlako, prozesatu beharreko datuen tamaina okerra zehazten da, eta horrek esleitutako bufferretik haragoko idazketa bat eragiten du. Zehazki, alderaketak "partialBlock + instance->byteIOIndex" adierazpena erabili zuen, eta horrek, osagaien balioak handiak zirenean, zenbaki osoko gainezkatze bat eragiten zuen. Gainera, kodeak "(unsigned int)(dataByteLen - i)" motaren bihurketa okerra zuen, eta horrek gainezkatze bat eragiten zuen 64 biteko size_t motako sistemetan.
Gainezkatze bat eragiten duen kodearen adibide bat: import hashlib h = hashlib.sha3_224() m1 = b»\x00» * 1; m2 = b»\x00» * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())
Iturria: opennet.ru
