Eine kurze Analyse der wilden Ausbeutung von CVE-2021-39137

Erkundung der Sicherheitslücke des CVE-2021-39137-Exploits und seiner Auswirkungen auf die Ethereum-Blockchain

Eine kurze Analyse der wilden Ausbeutung von CVE-2021-39137

CVE-2021-39137 ist eine Schwachstelle, die vor einigen Tagen gemeldet und behoben wurde. Allerdings haben noch nicht alle Ethereum-Knoten den Patch angewendet. Wir beobachten, dass diese Schwachstelle durch eine bösartige Transaktion ausgenutzt wurde.

Angriffstransaktion

https://tx.blocksecteam.com/tx/0x1cb6fb36633d270edefc04d048145b4298e67b8aa82a9e5ec4aa1435dd770ce4

Diese Transaktion hat einen STATICCALL mit der Adresse 0x4. Dies ist ein vorkompilierter Smart Contract dataCopy. Das Argument lautet wie folgt.

inOffset = 0, inSize = 32, retOffset = 7 und retSize = 32.

Der 0x4 Smart Contract

Abbildung 1

Da das Ziel des STATICCALL der vorkompilierte Vertrag 0x4 ist, wird die Funktion RunPrecompiledContract in Abbildung 1 ausgeführt.

Abbildung 2

Abbildung 3

Gemäß Abbildung 2/3 gibt der 0x4 Smart Contract einfach die Referenz des in-Zeigers zurück.

Abbildung 4

Abbildung 5

Abbildung 4 zeigt den Code für den Opcode STATICCALL. In Zeile 751 zeigt args auf [inOffset ~ inOffset + inSize] des EVM-Speichers, der Mem[0:32] ist.

Gemäß Abbildung 5 und der Analyse der Codestruktur von 0x04 (Abbildung 2/3) ist der Rückgabewert (ret) eine Referenz auf denselben Speicher wie args. Das heißt, er zeigt ebenfalls auf Mem[0:32].

Schwachstelle

Im anfälligen Code (Version 1.10.7) kopiert Zeile 762 den Inhalt von ret nach Mem[retOffset : retOffset + retOffset], d. h. kopiert Mem[0:32] nach Mem [7:7+32]. Diese Operation ändert versehentlich den Inhalt von ret. Das bedeutet, dass der Rückgabewert des vorkompilierten Vertrags 0x4 modifiziert wurde.

In der behobenen Version (1.10.8) wird eine Kopie von ret erstellt (Zeile 766). Dies kann die Schwachstelle beheben, da die Kopie in Zeile 767 den Inhalt von ret nicht ändern kann.

Die Schwachstelle CVE-2021–39137 wurde durch eine bösartige Transaktion ausgenutzt, da die Knoten ihre Patches nicht rechtzeitig aktualisiert haben. Dieser Fehler beinhaltete einen Defekt in den Speicheroperationen der Ethereum Virtual Machine, wurde aber in Version 1.10.8 behoben. Um die Systemsicherheit zu gewährleisten, wird allen Ethereum-Knoten dringend empfohlen, sofort auf die neueste Version zu aktualisieren.

Danksagungen

Der Angriff wird von Siwei Wu, Yufeng Hu, Lei Wu, Yajin Zhou@BlockSec analysiert.

Sign up for the latest updates