Sicherheitsanfälligkeit in der Bibliothek mit der Hauptimplementierung des SHA-3 Algorithmus

Bei der Implementierung der kryptografischen Hash-Funktion SHA-3 (Keccak), die im XKCP (eXtended Keccak Code Package) angeboten wird, wurde eine Sicherheitsanfälligkeit (CVE-2022-37454) entdeckt, die zu einem Bufferüberlauf bei der Verarbeitung bestimmter formatierten Daten führen kann. Das Problem entsteht durch einen Fehler im Code der spezifischen Implementierung von SHA-3, nicht durch eine Schwäche des Algorithmus selbst. Das XKCP-Paket wird als offizielle Implementierung von SHA-3 dargestellt, entwickelt mit Unterstützung des Keccak-Entwicklungsteams und wird als Grundlage in Funktionen für die Arbeit mit SHA-3 in verschiedenen Programmiersprachen verwendet (zum Beispiel wird der Code des XKCP in dem Python-Modul hashlib, dem Ruby-Paket digest-sha3 und den PHP-Funktionen hash_* verwendet).

Laut dem Forscher, der das Problem aufgedeckt hat, konnte er die Schwachstelle nutzen, um die kryptografischen Eigenschaften der Hash-Funktion zu verletzen und den ersten sowie den zweiten Vorläufer zu finden, ebenso wie Kollisionen zu bestimmen. Darüber hinaus wurde ein Prototyp eines Exploits entwickelt, der es ermöglicht, Code auszuführen, wenn ein Hash für eine speziell gestaltete Datei berechnet wird. Potenziell könnte die Schwachstelle auch für Angriffe auf Algorithmen zur Überprüfung digitaler Signaturen, die SHA-3 verwenden (wie zum Beispiel Ed448), genutzt werden. Details zu den Angriffsmethoden werden später veröffentlicht, nachdem die Schwachstelle umfassend behoben wurde.

Wie sich die Sicherheitsanfälligkeit auf bestehende Anwendungen in der Praxis auswirkt, ist derzeit unklar, da zur Manifestation des Problems im Code eine zyklische Berechnung des Hashs in Blöcken angewendet werden muss und einer der verarbeiteten Blöcke eine Größe von etwa 4 GB (mindestens 2^32 - 200 Byte) haben sollte. Bei der Verarbeitung von Eingabedaten auf einmal (ohne sequenzielle Berechnung des Hashs in Teilen) tritt das Problem nicht auf. Als einfachste Schutzmethode wird empfohlen, die maximale Größe der Daten, die an einer Iteration der Hash-Berechnung teilnehmen, zu begrenzen.

Die Sicherheitsanfälligkeit resultiert aus einem Fehler bei der Blockverarbeitung von Eingabedaten. Aufgrund eines fehlerhaften Vergleichs von Werten des Typs „int“ wird die falsche Größe der zu verarbeitenden Daten bestimmt, was dazu führt, dass die Übertragung über den zugewiesenen Puffer hinaus geschrieben wird. Insbesondere wurde beim Vergleich der Ausdruck „partialBlock + instance->byteIOIndex“ verwendet, der bei großen Werten der einzelnen Komponenten zu einem ganzzahligen Überlauf führte. Darüber hinaus gab es im Code eine fehlerhafte Typumwandlung „(unsigned int)(dataByteLen - i)“, die auf Systemen mit 64-Bit size_t zu einem Überlauf führte.

Beispielcode, der zu einem Überlauf führt: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster