Es war ein kleiner Schock für die Bitcoin-Cash-Community: Auf die planmäßige Umsetzung der Hard Fork bei Blockhöhe 582.600 folgten zunächst neun Transaktionsblöcke, die keine Transaktionen erhielten. Ein Angreifer hat versucht, einen seit November 2018 bestehenden Bug in Bitcoin ABC auszunutzen – ohne Erfolg.
Die Krypto-Analysten von BitMEX Research meldeten diesen Umstand umgehend bei Twitter.
Es scheint, als ob es ein Problem mit dem Bitcoin Cash Hard Fork Upgrade geben könnte, die Anzahl der Txs [Transaktionen] pro Block ist gering (0 in den letzten neun Blöcken, mit Ausnahme der Coinbase txn). Unser Mempool hat 1.622 txs.
Unterhalb des Diagramms ist die Anzahl der Txs pro Block und die orange Linie zeigt den Hard-Fork-Punkt.
It appears as if there may be a problem with the Bitcoin Cash hardfork upgrade, the number of txs per block is low (0 in the last 9 blocks, other than the coinbase txn). Our mempool has 1622 txs
Below chart is number of txs per block and the orange line is the hardfork point pic.twitter.com/UR3jQuN6Zm
— BitMEX Research (@BitMEXResearch) May 15, 2019
Kurz darauf wurde der Fehler identifiziert. Es handelt sich um einen älteren Bug in der ABC-Implementierung von Bitcoin Cash. Dieser betraf die Regeln für das Hinzufügen von Transaktionen in den Mempool, dem „Wartezimmer“ für valide Transaktionen, die noch ihrer Zusammenführung zu Blöcken harren. Die Nodes legen Transaktionen im Mempool ab, bevor sie sie zu Blöcken zusammenfassen.
Dabei überprüft die Node mit dem Befehl OP_CHECKDATASIG, wie viele Signaturüberprüfungen für eine Transaktion bereits vollzogen wurden. Für die Auswahl der Transaktionen spielt es unter anderem eine Rolle, wie oft ihre Signatur bereits überprüft wurde, sprich: die Zahl der „sigOps“. Die zulässige Anzahl der sigOps, die ein Block insgesamt enthalten darf, ist limitiert. Das hat unter anderem den Hintergrund, dass ein Miner einen Block mit sehr vielen sigOps nur sehr langsam bestätigen kann.
Bug existiert seit November-Hard-Fork von Bitcoin Cash
Stark vereinfacht ausgedrückt, haben die ABC-Nodes die falsche Anzahl von sigOps registriert. Der Bitcoin-Verde-Entwickler „FerriestaPatronum“ weist auf Reddit darauf hin, dass der Bug zu jedem Zeitpunkt seit der November-Fork von BCH Probleme hätte verursachen können.
Dieses Szenario hätte jederzeit nach der Einführung von OP_CHECKDATASIG stattfinden können. Indem man viele Transaktionen erstellt, die nur OP_CHECKDATASIG verwenden, und sie dann alle gleichzeitig ausgibt, würde man Blöcke erstellen, die das enthalten, was der Mempool für sehr wenige sigOps hält, aber überall sonst viel zu viele sigOps enthält. Anstatt einen ungültigen Block zu minen, entscheidet die Mining-Software, einen leeren Block zu minen.
Angreifer wusste von Bug
Der Angreifer muss bereits seit Längerem Kenntnis von dem Bug gehabt haben, ohne diese mit dem Rest der BCH Community zu teilen. Davon geht zumindest der Cornell-Professor Emin Gün Sirer aus, der zugleich das Timing des Angriffs hinterfragt.
Jemand verbrachte Monate damit, auf diesem Fehler zu sitzen und entschied sich dafür, ihn während eines geplanten Upgrades auszunutzen. Es ist ziemlich unreif, aber auch eine große Erinnerung daran, dass dies ein Raum mit byzantinischen Akteuren ist, und wir müssen der Korrektheit der Software große Aufmerksamkeit schenken.
Someone spent months sitting on this bug and chose to exploit it during a scheduled upgrade. It's pretty juvenile, but also, a great reminder that this is a space with byzantine actors, and we must pay close attention to software correctness.
— Emin Gün Sirer🔺 (@el33th4xor) May 15, 2019
Unmittelbar nach der Entdeckung des Bugs wurde ein Patch für seine Behebung veröffentlicht. Betreiber von ABC Nodes sind nun dazu angehalten, ihn umgehend zu installieren. Die anderen Bitcoin-Cash-Implementierungen, namentlich Bitcoin Unlimited, waren von dem Bug nicht betroffen.
Der Bitcoin-Cash-Kurs zeigte sich von dem Vorfall wenig beeindruckt, im Gegenteil. Am Tag nach der Hard Fork steht er mit einem Tagesplus von knapp neun Prozent (zu Redaktionsschluss) bei 416 US-Dollar. Der BCH-Kurs hat in den vergangenen 30 Tagen somit um 45 Prozent zugelegt.