Haavatavus SHA-3 algoritmi põhiteost tegevas raamistikus

XKCP (eXtended Keccak Code Package) pakendis leiti SHA-3 (Keccak) krüptograafilise hajutefunktsiooni rakenduses haavatavus (CVE-2022-37454), mis võib põhjustada puhversalvimise ülekoormust teatud kujundatud andmete töötlemise käigus. Probleem tuleneb SHA-3 konkreetse rakenduse koodist, mitte algoritmi enda haavatavusest. XKCP pakett esitatakse kui ametlik SHA-3 rakendus, seda arendavad Keccak arendusmeeskonna liikmed ja seda kasutatakse SHA-3 funktsioonide aluseks erinevates programmeerimiskeeltes (näiteks kasutatakse XKCP koodi Python moodulis hashlib, Ruby paketis digest-sha3 ja PHP funktsioonides hash_*).

Uurija väitel, kes probleemi avastas, õnnestus tal kasutada haavatavust, et rikkuda krüptograafilisi omadusi ja leida esimest ja teist eellaset ning määrata kokku langevusi. Samuti on teatatud prototüübi valmistamisest, mis võimaldab saavutada koodi täitmist, kui arvutatakse kokku pandud faili häsher. Potentsiaalselt võib haavatavust kasutada ka rünnakute jaoks digitaalsete allkirjade kontrollimise algoritmide vastu, mis kasutavad SHA-3 (näiteks Ed448). Rünnakute läbiviimise meetodite üksikasju kavatsetakse hiljem avaldada, pärast haavatavuse laialdast kõrvaldamist.

Praegu ei ole selge, kui palju haavatavus mõjutab olemasolevaid rakendusi, kuna probleemi ilmnemiseks peab koodis toimuma tsükliline räsi arvutamine plokkidena, kus üks töödeldav plokk peab olema umbes 4 GB (vähemalt 2^32 — 200 baiti). Kui sisendandmeid töödeldakse korraga (ilma osade kaupa räsi järjekindla arvutamiseta), ei ilmne probleem. Lihtsaim kaitsemeetod on pakkuda maksimaalse andme suuruse piirangut, mis osaleb ühes räsi arvutamise iteratsioonis.

Haavatavus on tingitud veast sisendandmete plokkide töötlemisel. Vale "int"-tüüpi väärtuste võrdlemise tõttu määratakse vale oodatavate andmete suurus, mis viib saba kirjutamiseni väljapoole eraldatud puhverpiiri. Eriti kasutati võrdlemisel väljendit "partialBlock + instance->byteIOIndex", mis suurte komponentide väärtuste korral viis täisarvu ülevooluni. Lisaks oli koodis vale tüüpide teisendamine "(unsigned int)(dataByteLen - i)", mis põhjustas ülevoolu 64-bitiste size_t tüübiga süsteemidel.

Koodinäide, mis võib juhtuda ülevool: 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

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster