SHA-3 (Keccak) krĂŒptograafilise rĂ€si funktsiooni rakenduses, mida pakutakse XKCP (eXtended Keccak Code Package) paketis, on avastatud haavatavus (CVE-2022-37454), mis vĂ”ib pĂ”hjustada puhvrivigu teatud vormindatud andmete töötlemisel. Probleem tuleneb konkreetses SHA-3 rakenduses esinevast veast, mitte algoritmi enda haavatavusest. XKCP pakett esitatakse kui SHA-3 ametlik rakendus, mida arendatakse Keccak arendajate meeskonna osalusel ja mida kasutatakse erinevates programmeerimiskeeltes SHA-3 töömeetodite pĂ”hialusena (nĂ€iteks kasutatakse XKCP koodi Python moodulis hashlib, Ruby pakendis digest-sha3 ja PHP funktsioonides hash_*).
Probleemi avastanud teadlase vĂ€itel Ă”nnestus tal kasutada haavatavust krĂŒptograafiliste omaduste rikkumiseks ja esimese ja teise pre-pildi leidmiseks, samuti kollisioonide mÀÀramiseks. Lisaks on teatatud prototĂŒĂŒbi vĂ€ljatöötamisest, mis vĂ”imaldab saavutada koodi tĂ€itmise spetsiaalselt vormindatud faili rĂ€si arvutamise kĂ€igus. Potentsiaalselt vĂ”ib haavatavust kasutada ka digitaalsete allkirjade kontrollimise algoritmide rĂŒnnakutes, mis kasutavad SHA-3-d (nĂ€iteks Ed448). RĂŒnnakute lĂ€biviimise meetodite ĂŒksikasju kavatsetakse hiljem avaldada, pĂ€rast haavatavuse tĂ€ielikku kĂ”rvaldamist.
Mugavuse mĂ”ju olemasolevatele rakendustele pole praktikas veel selge, kuna probleemi ilmnemiseks peab koodis olema tsĂŒkliline plokkide kaupa hash-arvutamine, ja ĂŒks töödeldavatest plokkidest peab olema ligikaudu 4 GB (vĂ€hemalt 2^32 â 200 baiti). Sisendandmete töötlemisel korraga (ilma jĂ€rjestikulise hash-arvutamiseta osade kaupa) probleem ei ilmne. Lihtsama kaitsemeetodina pakutakse vĂ€lja maksimaalse andmekoguse piiramist, mis osaleb ĂŒhes hash-arvutamise iteratsioonis.
Mugavus on tingitud veast sisendandmete plokkide töötlemisel. Vale âintâ tĂŒĂŒbiga vÀÀrtuste vĂ”rdlemise tĂ”ttu mÀÀratakse ootavate andmete vale suurus, mis viib andmete kirjutamiseni eraldatud puhvrist vĂ€lja. Eriti vĂ”rdlemisel kasutati vĂ€ljendit âpartialBlock + instance->byteIOIndexâ, mis suurte komponentide vÀÀrtuste korral pĂ”hjustas tĂ€isarvu ĂŒletĂ€itumise. Lisaks oli koodis vale tĂŒĂŒbimuutmine â(unsigned int)(dataByteLen â i)â, mis pĂ”hjustas ĂŒletĂ€itumise 64-bitises size_t tĂŒĂŒbiga sĂŒsteemides.
ĂletĂ€itumisse viiv koodinĂ€ide: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())
Allikas: opennet.ru
