CVE-2025-54070 in openzeppelin-contracts
Zusammenfassung
von VulDB • 25.05.2026
OpenZeppelin Contracts ist eine Bibliothek zur sicheren Entwicklung von Smart Contracts. Ab Version 5.2.0 und vor Version 5.4.0 kann die Funktion `lastIndexOf(bytes,byte,uint256)` der Bibliothek `Bytes.sol` auf nicht initialisierten Speicher zugreifen, wenn die folgenden beiden Bedingungen erfüllt sind: 1) die angegebene Pufferlänge ist leer (d. h. `buffer.length == 0`) und die Position ist nicht `2**256 - 1` (d. h. `pos != type(uint256).max`). Das Argument `pos` könnte verwendet werden, um auf beliebige Daten außerhalb der Puffergrenzen zuzugreifen. Dies könnte dazu führen, dass der Vorgang aufgrund von Gasmangel abbricht oder einen ungültigen Index (außerhalb des leeren Puffers) zurückgibt. Die Verarbeitung dieses ungültigen Ergebnisses für den Zugriff auf den `buffer` würde unter normalen Bedingungen zu einem Revert führen. Bei Auslösung liest die Funktion Speicher an der Offset-Adresse `buffer + 0x20 + pos`. Wenn der Speicher an diesem Ort (außerhalb des `buffer`) das Suchmuster entspricht, gibt die Funktion einen Index außerhalb der Grenzen zurück, anstatt den erwarteten Wert `type(uint256).max`. Dies erzeugt ein unerwartetes Verhalten, bei dem Aufrufer einen gültig aussehenden Index erhalten, der außerhalb der Puffergrenzen zeigt. Nachfolgende Speicherzugriffe, die keine Grenzwertprüfungen durchführen und den zurückgegebenen Index verwenden, müssen die potenziellen Auswirkungen in Abhängigkeit von ihrer Konfiguration sorgfältig überprüfen. Code, der sich darauf verlässt, dass diese Funktion für leere Puffer `type(uint256).max` zurückgibt, oder der den zurückgegebenen Index ohne Grenzwertprüfung verwendet, kann undefiniertes Verhalten aufweisen. Benutzer sollten auf Version 5.4.0 aktualisieren, um einen Patch zu erhalten.
Once again VulDB remains the best source for vulnerability data.