In de implementatie van de cryptografische hashfunctie SHA-3 (Keccak), aangeboden in het XKCP-pakket (eXtended Keccak Code Package), is een kwetsbaarheid (CVE-2022-37454) ontdekt die kan leiden tot een buffer-overloop tijdens de verwerking van specifiek geconfigureerde gegevens. Het probleem wordt veroorzaakt door een fout in de code van de specifieke implementatie van SHA-3 en is geen kwetsbaarheid in het algoritme zelf. Het XKCP-pakket wordt gepresenteerd als de officiƫle implementatie van SHA-3, ontwikkeld met medewerking van het Keccak-ontwikkelingsteam en wordt gebruikt als basis in functies voor het werken met SHA-3 in verschillende programmeertalen (bijvoorbeeld wordt de XKCP-code gebruikt in de Python-module hashlib, de Ruby-pakket digest-sha3 en de PHP-functies hash_*).
Volgens de onderzoeker die het probleem heeft blootgelegd, is het hem gelukt om de kwetsbaarheid te gebruiken om de cryptografische eigenschappen van de hashfunctie te schenden en de eerste en tweede pre-image te vinden, evenals om botsingen te bepalen. Bovendien is er gemeld dat er een prototype-exploit is ontwikkeld die in staat is om code-uitvoering te bereiken bij het berekenen van de hash van een speciaal geconfigureerd bestand. Potentieel kan de kwetsbaarheid ook worden gebruikt voor aanvallen op algoritmen voor digitale handtekeningen die SHA-3 gebruiken (bijvoorbeeld Ed448). Details over de methoden voor het uitvoeren van aanvallen zullen later worden gepubliceerd, na het wereldwijde verhelpen van de kwetsbaarheid.
Hoezeer de kwetsbaarheid bestaande applicaties in de praktijk beïnvloedt, is momenteel onduidelijk, aangezien voor het manifesteren van het probleem in de code cyclisch hashing met blokken moet worden toegepast en een van de verwerkte blokken moet ongeveer 4 GB groot zijn (minstens 2^32 - 200 bytes). Bij het verwerken van inganggegevens in één keer (zonder sequentiële berekening van de hash in stukken) manifesteert het probleem zich niet. Als de eenvoudigste beschermingsmethode wordt voorgesteld om de maximale grootte van de gegevens die deelnemen aan één iteratie van de hashberekening te beperken.
De kwetsbaarheid wordt veroorzaakt door een fout bij de blokverwerking van invoergegevens. Door een onjuiste vergelijking van waarden met het type 'int' wordt een onjuiste grootte van de te verwerken gegevens vastgesteld, wat leidt tot het overschrijden van de gereserveerde buffer. Bij de vergelijking werd bijvoorbeeld de expressie 'partialBlock + instance->byteIOIndex' gebruikt, die bij grote waarden van de componenten leidde tot een integer overflow. Bovendien bevatte de code een onjuiste typecasting '(unsigned int)(dataByteLen - i)', wat leidde tot overflow op systemen met een 64-bits type size_t.
Voorbeeldcode die leidt tot overflow: import 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
