Ethereum: Constantinople Hardfork findet doch nicht statt

Kurz bevor die Constantinople Hardfork aktiviert werden sollte, haben die Ethereum-Entwickler sie abgeblasen. Der Grund: Sicherheitsforscher haben einen Bug gefunden. Für Ethereum Node Betreiber bedeutet das: Ihr braucht erneut ein Update.

Die Constantinople Hardfork bei Ethereum hätte eigentlich heute, am 16. Januar, aktiviert werden sollen. Sie galt als unkontrovers und unproblematisch, da sie von allen Entwicklern und Börsen unterstützt wurde. Nun gab die Ethereum Foundation aber bekannt, dass die Fork abgesagt wird:

“Die Ethereum Core Entwickler und die Ethereum Security Community wurden darauf aufmerksam gemacht, dass ChainSecurity am 15. Januar 2019 potentielle Probleme mit Constantinople entdeckt haben. Wir untersuchen die möglichen Probleme und werden ein Update folgen lassen.” Der Vorsicht wegen haben Schlüssel-Stakeholder der Ethereum-Community beschlossen, “dass es der beste Handlungsweg sein wird, die geplante Constantinople Fork zu verzögern, die bei Block 7.080.000 am 16. Januar 2019 geschehen wäre.”

Jeder, der einen Node betreibt – ob Privatmann, Miner, Börse oder Wallet-Service – muss Geth oder Parity updaten, bevor die Blockchain Block 7.080.000 erreicht. Für Geth gibt es bereits den Release 1.8.21, für Parity Version 2.2.7. Alternativ können User auch zu den Versionen 1.8.19 beziehungsweise 2.2.4 downgraden. Für “normale User”, also die, die MyEtherWallet, Trezor, Ledger oder Metamask verwenden, gibt es nichts zu tun. Ihre Anwendung wird reibungslos weiterlaufen, sobald die Service-Provider ihren Node aktualisiert haben.

Der Grund für die Verzögerung ist, dass ChainSecurity ein Problem mit EIP-1283 entdeckt hat. In einem Post erklärt ChainSecurity in der Tiefe, was es mit dem Bug auf sich hat. EIP-1283 hat die Gaspreise für eine gewisse Operation (SSTORE) gesenkt. Das ist der geplante Effekt. Ein unerwünschter Nebeneffekt davon ist jedoch, dass es zu “reentrancy attacks” kommen kann, wenn Smart Contracts bestimmte Funktionen ausführen (address.transfer oder address.send).

Das Wiki von Consensys erklärt, das die “Reentrancy Attack” ein breites Feld von Problemen von Smart Contracts umfasst: “Eine der großen Gefahren bei Aufruf externer Contracts ist, dass diese den Kontrollstrom übernehmen und dadurch deine Daten auf eine Weise ändern können, die die aufrufende Funktion nicht erwartet. Diese Klasse von Bugs kann viele  Formen haben, und die beiden großen Bugs, die zum Kollaps der DAO geführt haben, gehörten zu ihr.”

Der Code von EIP-1283 ist, erklärt ChainSecurity, auf eine überraschende Weise angreifbar: “Er simuliert einen sicheren geteilten Guthaben-Service. Zwei Parteien können sich zusammenschließen, um etwas zu erhalten, darüber entscheiden, wie sie das Guthaben aufteilen, und dann eine Zahlung erhalten, wenn beide einverstanden sind.” Ein Angreifer kann einen solchen Smart Contract, in den er involviert ist, mit einer Transaktion angreifen. Dann führt der Angreifer eine Storage-Operation durch – die dank der Vergünstigungen durch EIP-1283 nun in eine transfer- oder send-Funktion passt – was die Aufteilung der Guthaben so manipuliert, dass alles zu ihm geht anstatt zu beiden Parteien.

An sich ist ein solcher Vertrag gut vorstellbar. Ein Contract bekommt eine Einzahlung auf verteilt sie nach einem bestimmten Schema an die Inhaber des Contracts. Klingt nützlich. Allerdings haben Sicherheitsanalysen von ChainSecurity und TrailOfBits bislang noch keinen Vertrag auf der Blockchain gefunden, der verletzbar ist. “Es gibt jedoch”, so die Ethereum Foundation, “ein Risiko von mehr als 0 Prozent, dass einige bestehende Verträge berührt werden.”

Um den Analysten die Zeit zu verschaffen, die Risiken mit Sorgfalt zu prüfen, wurde beschlossen, dass die Hard Fork verschoben wird. Wann genau, weiß derzeit noch keiner. Einfach nur EIP-1283 aus den Hardfork-Features zu entfernen, kann ebenfalls unerwünschte Nebeneffekte haben und muss zumindest getestet werden. Außerdem wollen die Ethereum-Entwickler das Feature ja, und vielleicht gibt es eine Möglichkeit, es zu aktivieren, ohne dass sich eine Angriffsfläche aufspannt.

Zu viel Zeit können sich die Entwickler dabei nicht lassen. Denn Constantinople entschärft ja auch die Difficulty Bomb. Das ist ein Algorithmus, der bestimmt, dass die Schwierigkeit des Minings ab einem gewissen Zeitpunkt exponentiell ansteigt. Das geht erst langsam, aber dann immer schneller, bis das Netzwerk quasi eingefroren ist, weil keiner mehr einen Block findet. Sichtbar ist der Effekt schon jetzt: Die Anzahl der am Tag gefundenen Blöcke ist von täglich gut 6.000 im Dezember auf gut 5.500 gesunken. Es ist zu erwarten, dass die Difficulty Bomb ab Februar immer deutlicher zu spüren sein wird.