Kwetsbaarheid in de bibliotheek met de hoofdimplementatie van het SHA-3-algoritme

Er is een kwetsbaarheid (CVE-3-2022) geïdentificeerd bij de implementatie van de SHA-37454 (Keccak) cryptografische hashfunctie die wordt aangeboden in het XKCP-pakket (eXtended Keccak Code Package), wat kan leiden tot een bufferoverflow tijdens de verwerking van bepaalde geformatteerde gegevens. Het probleem wordt veroorzaakt door een bug in de code van een specifieke implementatie van SHA-3, en niet door een kwetsbaarheid in het algoritme zelf. Het XKCP-pakket wordt aangeprezen als de officiële implementatie van SHA-3, ontwikkeld met input van het Keccak-ontwikkelteam, en gebruikt als basis voor SHA-3-functies in verschillende programmeertalen (XKCP-code wordt bijvoorbeeld gebruikt in de Python-hashlib module, het Ruby digest-pakket sha3 en PHP hash_*-functies).

Volgens de onderzoeker die het probleem heeft geïdentificeerd, kon hij de kwetsbaarheid gebruiken om de cryptografische eigenschappen van de hashfunctie te schenden en de eerste en tweede voorafbeeldingen te vinden, en om botsingen te detecteren. Bovendien werd aangekondigd dat er een prototype-exploit zou worden gemaakt waarmee code zou kunnen worden uitgevoerd bij het berekenen van de hash van een speciaal ontworpen bestand. Het beveiligingslek kan mogelijk ook worden gebruikt om algoritmen voor de verificatie van digitale handtekeningen aan te vallen die SHA-3 gebruiken (bijvoorbeeld Ed448). Details van de aanvalsmethoden zullen naar verwachting later worden gepubliceerd, nadat de kwetsbaarheid overal is geëlimineerd.

Het is nog niet duidelijk in hoeverre de kwetsbaarheid bestaande applicaties in de praktijk treft. Om het probleem zich in de code te laten manifesteren, moeten er cyclische hash-berekeningen in blokken worden gebruikt en moet een van de verwerkte blokken ongeveer 4 GB groot zijn (minimaal 2^32 - 200 bytes). Bij het in één keer verwerken van de invoergegevens (zonder de hash in delen opeenvolgend te berekenen) doet het probleem zich niet voor. Als de eenvoudigste beschermingsmethode wordt voorgesteld om de maximale grootte van de gegevens die betrokken zijn bij één iteratie van de hashberekening te beperken.

Het beveiligingslek wordt veroorzaakt door een fout in de blokverwerking van invoergegevens. Door een onjuiste vergelijking van waarden met het type "int" wordt de onjuiste grootte van in behandeling zijnde gegevens bepaald, wat ertoe leidt dat de staart voorbij de toegewezen buffer wordt geschreven. In het bijzonder werd bij de vergelijking de uitdrukking “partialBlock + instance->byteIOIndex” gebruikt, wat leidde tot een overflow van gehele getallen voor grote waarden van de samenstellende delen. Bovendien was er een onjuist type cast "(unsigned int)(dataByteLen - i)" in de code, wat een overflow veroorzaakte op systemen met een 64-bits size_t-type.

Voorbeeldcode die overflow veroorzaakt: 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

Voeg een reactie