Në implementimin e funksionit të hasheve kriptografike SHA-3 (Keccak), i propozuar në paketën XKCP (eXtended Keccak Code Package), është zbuluar një vulnerabilitet (CVE-2022-37454), që mund të çojë në mbushjen e buffers gjatë procesit të përpunimit të të dhënave të caktuara. Problemi shkaktohet nga një gabim në kodin e implementimit të veçantë të SHA-3, dhe jo nga vetë algoritmi. Paketa XKCP paraqitet si implementimi zyrtar i SHA-3, zhvillohet me pjesëmarrjen e ekipit të zhvilluesve Keccak dhe përdoret si bazë në funksionet për punën me SHA-3 në gjuhë të ndryshme programimi (p.sh., kodi XKCP përdoret në modulën hashlib të Python, paketën digest-sha3 të Ruby dhe funksionet hash_* të PHP).
Sipas deklaratës së kërkuesit që zbuloi problemin, ai arriti të përdorë vulnerabilitetin për të shkelur vetitë kriptografike të funksionit të hash-it dhe për të gjetur parazgjedhjet e para dhe të dyta, si dhe për të përcaktuar kolizionet. Për më tepër, është deklaruar se është krijuar një prototip i një eksploitimi, i cili mundëson ekzekutimin e kodit gjatë llogaritjes së hash-it për një skedar të caktuar. Potencialisht, vulnerabiliteti gjithashtu mund të përdoret për sulme ndaj algoritmeve të verifikimit të nënshkrimeve digjitale që përdorin SHA-3 (p.sh., Ed448). Detajet e metodave të kryerjes së sulmeve planifikohen të publikohen më vonë, pas eliminimit të plotë të vulnerabilitetit.
Sa nĂ« praktikĂ« ndikon vulnerabiliteti nĂ« aplikacionet ekzistuese nuk dihet ende, pasi pĂ«r tĂ« shfaqur problemin nĂ« kod duhet tĂ« aplikohet llogaritja ciklike e hash-it me blloqe dhe njĂ«ri nga blloqet e pĂ«rpunuar duhet tĂ« ketĂ« njĂ« madhĂ«si rreth 4 GB (nĂ« minimum 2^32 â 200 byte). Kur tĂ« dhĂ«nat e hyrjes pĂ«rpunohen njĂ«herĂ«sh (pa llogaritjen e hash-it nĂ« pjesĂ«), problemi nuk shfaqet. Si njĂ« metodĂ« e thjeshtĂ« pĂ«r mbrojtje, sugjerohet tĂ« kufizohet madhĂ«sia maksimale e tĂ« dhĂ«nave qĂ« pĂ«rfshihen nĂ« njĂ« iteracion tĂ« llogaritjes sĂ« hash-it.
Vulnerabiliteti shkaktohet nga njĂ« gabim gjatĂ« trajtimit tĂ« dhĂ«nave hyrĂ«se nĂ« bllok. PĂ«r shkak tĂ« krahasimit tĂ« gabuar tĂ« vlerave me tipin "int", pĂ«rcaktohet njĂ« madhĂ«si e gabuar pĂ«r tĂ« dhĂ«nat qĂ« pritet tĂ« pĂ«rpunohen, çka çon nĂ« shkruarjen e tail-it jashtĂ« memorizimit tĂ« alokuar. NĂ« veçanti, nĂ« krahasim Ă«shtĂ« pĂ«rdorur shprehja "partialBlock + instance->byteIOIndex", e cila me vlera tĂ« mĂ«dha tĂ« komponenteve çonte nĂ« mbipĂ«rkufizim tĂ« numrave. Gjithashtu, nĂ« kod kishte njĂ« konvertim tĂ« gabuar tĂ« tipeve "(unsigned int)(dataByteLen â i)", qĂ« shkaktonte mbipĂ«rkufizim nĂ« sistemet me tipin 64-bit size_t.
Shembulli i kodit që shkakton mbipërkufizim: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())
Burimi: opennet.ru
