Kwesbaarheid in die biblioteek met die hoofimplementering van die SHA-3-algoritme

'n Kwesbaarheid (CVE-3-2022) is geïdentifiseer in die implementering van die SHA-37454 (Keccak) kriptografiese hash-funksie wat in die XKCP-pakket (eXtended Keccak Code Package) aangebied word, wat kan lei tot 'n bufferoorloop wanneer sekere data verwerk word. Die probleem word veroorsaak deur 'n fout in die kode van 'n spesifieke implementering van SHA-3, en nie deur 'n kwesbaarheid in die algoritme self nie. Die XKCP-pakket word voorgehou as die amptelike implementering van SHA-3, ontwikkel met insette van die Keccak-ontwikkelingspan, en gebruik as die basis vir SHA-3-funksies in verskeie programmeertale (bv. XKCP-kode word gebruik in die Python-hashlib) module, die Ruby digest pakket sha3 en PHP hash_* funksies).

Volgens die navorser wat die probleem geïdentifiseer het, kon hy die kwesbaarheid gebruik om die kriptografiese eienskappe van die hash-funksie te skend en die eerste en tweede voorbeelde te vind, asook om botsings op te spoor. Boonop is aangekondig dat 'n prototipe-ontginning geskep sal word wat dit moontlik maak om kode uit te voer wanneer die hash van 'n spesiaal ontwerpte lêer bereken word. Die kwesbaarheid kan moontlik ook gebruik word om digitale handtekeningverifikasiealgoritmes aan te val wat SHA-3 gebruik (byvoorbeeld Ed448). Besonderhede van die aanvalmetodes word beplan om later gepubliseer te word, nadat die kwesbaarheid oral uitgeskakel is.

Dit is nog nie duidelik hoeveel die kwesbaarheid bestaande toepassings in die praktyk affekteer nie, want vir die probleem om homself in die kode te manifesteer, moet sikliese hash-berekeninge in blokke gebruik word en een van die verwerkte blokke moet ongeveer 4 GB groot wees (ten minste 2^32 - 200 grepe). Wanneer die invoerdata op een slag verwerk word (sonder om die hash in dele opeenvolgend te bereken), verskyn die probleem nie. As die eenvoudigste metode van beskerming, word voorgestel om die maksimum grootte van die data wat betrokke is by een iterasie van die hash-berekening te beperk.

Die kwesbaarheid word veroorsaak deur 'n fout in blokverwerking van invoerdata. As gevolg van verkeerde vergelyking van waardes met tipe "int", word die verkeerde grootte van hangende data bepaal, wat daartoe lei dat die stert verder as die toegewese buffer geskryf word. Die vergelyking het veral die uitdrukking "partialBlock + instance->byteIOIndex" gebruik, wat gelei het tot heelgetaloorloop vir groot waardes van die samestellende dele. Daarbenewens was daar 'n verkeerde tipe cast "(unsigned int)(dataByteLen - i)" in die kode, wat 'n oorloop op stelsels met 'n 64-bis size_t tipe veroorsaak het.

Voorbeeld kode wat oorloop veroorsaak: invoer hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00″ * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

Bron: opennet.ru

Voeg 'n opmerking