Dobësia në bibliotekë me zbatimin kryesor të algoritmit SHA-3

Një dobësi (CVE-3-2022) është identifikuar në zbatimin e funksionit hash kriptografik SHA-37454 (Keccak) të ofruar në paketën XKCP (EXtended Keccak Code Package), i cili mund të çojë në një tejmbushje buferi gjatë përpunimit të disa të dhëna të formatuara. Problemi shkaktohet nga një gabim në kodin e një zbatimi specifik të SHA-3, dhe jo nga një cenueshmëri në vetë algoritmin. Paketa XKCP konsiderohet si zbatimi zyrtar i SHA-3, i zhvilluar me të dhëna nga ekipi i zhvillimit të Keccak dhe përdoret si bazë për funksionet SHA-3 në gjuhë të ndryshme programimi (p.sh., kodi XKCP përdoret në hashlibin Python moduli, funksionet e paketës Ruby digest sha3 dhe PHP hash_*).

Sipas studiuesit që identifikoi problemin, ai ishte në gjendje të përdorte dobësinë për të shkelur vetitë kriptografike të funksionit hash dhe për të gjetur imazhet e para dhe të dyta, si dhe për të zbuluar përplasjet. Përveç kësaj, u njoftua se do të krijohej një shfrytëzim prototip që do të lejonte ekzekutimin e kodit gjatë llogaritjes së hash-it të një skedari të krijuar posaçërisht. Dobësia mund të përdoret gjithashtu për të sulmuar algoritmet e verifikimit të nënshkrimit dixhital që përdorin SHA-3 (për shembull, Ed448). Detajet e metodave të sulmit janë planifikuar të publikohen më vonë, pasi cenueshmëria të jetë eliminuar kudo.

Nuk është ende e qartë se sa cenueshmëria prek aplikacionet ekzistuese në praktikë, pasi që problemi të shfaqet në kod, duhet të përdoren llogaritjet ciklike të hash-it në blloqe dhe një nga blloqet e përpunuara duhet të jetë rreth 4 GB në madhësi (të paktën 2^32 - 200 bajt). Kur përpunoni të dhënat e hyrjes menjëherë (pa llogaritur në mënyrë sekuenciale hash-in në pjesë), problemi nuk shfaqet. Si metoda më e thjeshtë e mbrojtjes, propozohet të kufizohet madhësia maksimale e të dhënave të përfshira në një përsëritje të llogaritjes hash.

Dobësia është shkaktuar nga një gabim në përpunimin e bllokut të të dhënave hyrëse. Për shkak të krahasimit të gabuar të vlerave me tipin "int", përcaktohet madhësia e gabuar e të dhënave në pritje, gjë që çon në shkrimin e bishtit përtej buferit të caktuar. Në veçanti, krahasimi përdori shprehjen "partialBlock + instance->byteIOIndex", e cila çoi në tejkalim të numrave të plotë për vlera të mëdha të pjesëve përbërëse. Për më tepër, në kod kishte një cast të llojit të gabuar "(unsigned int)(dataByteLen - i)", i cili shkaktoi një tejmbushje në sistemet me një lloj size_t 64-bit.

Shembull i kodit që shkakton tejmbushje: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.përditësim(m1) h.përditësim(m2) print(h.hexdigest())

Burimi: opennet.ru

Shto një koment