Eine Schwachstelle in der Bibliothek mit der Hauptimplementierung des SHA-3-Algorithmus

In der Implementierung der kryptografischen Hash-Funktion SHA-3 (Keccak), die im Paket XKCP (eXtended Keccak Code Package) angeboten wird, wurde eine Schwachstelle (CVE-2022-37454) entdeckt, die zu einem Buffer Overflow bei der Verarbeitung bestimmter formatierten Daten führen kann. Das Problem wird durch einen Fehler im Code der konkreten SHA-3-Implementierung verursacht und nicht durch eine Schwachstelle im Algorithmus selbst. Das Paket XKCP wird als offizielle Implementierung von SHA-3 präsentiert, entwickelt mit dem Beitrag des Keccak-Entwicklungsteams und wird als Grundlage in Funktionen zur Arbeit mit SHA-3 in verschiedenen Programmiersprachen verwendet (zum Beispiel wird der XKCP-Code im Python-Modul hashlib, im Ruby-Paket digest-sha3 und in PHP-Funktionen hash_* verwendet).

Laut dem Forscher, der das Problem entdeckt hat, gelang es ihm, die Schwachstelle auszunutzen, um die kryptografischen Eigenschaften der Hash-Funktion zu beeinträchtigen und die erste und zweite Urbilder zu finden sowie Kollisionen zu bestimmen. Zudem wurde ein Prototyp eines Exploits erstellt, der es ermöglicht, Code während der Berechnung des Hashs einer speziell formatierten Datei auszuführen. Potenziell kann die Schwachstelle auch für Angriffe auf digitale Signaturprüfalgorithmus verwendet werden, die SHA-3 nutzen (zum Beispiel Ed448). Einzelheiten zu den Methoden der Angriffe sollen später veröffentlicht werden, nachdem die Schwachstelle umfangreich behoben wurde.

Wie sehr die Schwachstelle bestehende Anwendungen in der Praxis betrifft, ist bisher unklar, da für das Auftreten des Problems im Code eine zyklische Berechnung des Hashs in Blöcken angewendet werden muss und einer der bearbeiteten Blöcke etwa 4 GB (mindestens 2^32 — 200 Bytes) groß sein muss. Bei der Verarbeitung von Eingangsdaten auf einmal (ohne sequenzielle Berechnung des Hashs in Teilen) tritt das Problem nicht auf. Als einfachste Schutzmaßnahme wird vorgeschlagen, die maximale Größe der Daten, die an einer Iteration der Hash-Berechnung beteiligt sind, zu begrenzen.

Die Verwundbarkeit wird durch einen Fehler bei der Blockverarbeitung von Eingabedaten verursacht. Aufgrund unkorrekter Wertvergleiche mit dem Typ „int“ wird die falsche Größe der zu verarbeitenden Daten bestimmt, was dazu führt, dass ein Überlauf über den zugewiesenen Puffer geschrieben wird. Insbesondere wurde bei den Vergleichen der Ausdruck „partialBlock + instance->byteIOIndex“ verwendet, der bei hohen Werten der einzelnen Komponenten zu einem Integer-Überlauf führte. Darüber hinaus gab es im Code eine falsche Typumwandlung „(unsigned int)(dataByteLen - i)“, die auf Systemen mit 64-Bit-typ 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

60GB SSD 8Gb DDR4