NachrichtenKryptoRogue-Electrum-Server tauschten gesendete Zahlungen gegen gefälschte Zero-Fee-Bitcoin-Transaktionen aus; Fix in 4.8.3 veröffentlicht

Rogue-Electrum-Server tauschten gesendete Zahlungen gegen gefälschte Zero-Fee-Bitcoin-Transaktionen aus; Fix in 4.8.3 veröffentlicht

Autor: Cryptopolitan·

Wichtige Erkenntnisse

  • •Electrum hat Version 4.8.3 veröffentlicht, um eine schwerwiegende Schwachstelle zu beheben, bei der bösartige Server gesendete Zahlungen austauschten; Maintainer SomberNight veröffentlichte am 24. Oktober den Hinweis GHSA-6jp4-8v48-cc5v und rief die Nutzer zum Update auf.
  • •Der Angriff funktionierte, weil ältere Versionen die Signaturen von Mempool-Transaktionen nicht prüften: Eine gefälschte Zero-Fee-Transaktion erschien als ausstehend, und eine Replace-By-Fee-Gebührenerhöhung veranlasste die Wallet des Opfers, die Version des Angreifers mit gültiger Signatur zu signieren.
  • •Ein dokumentiertes Opfer mit einem 2-von-3-Legacy-P2SH-Multisig und zwei Trezors erhielt eine Fälschung mit byteidentischen scriptSigs auf 31 Inputs, deren Zieladresse die letzten vier Zeichen der echten Adresse imitierte und auf GyQ3 endete.
  • •Der in Commit 90fe308 eingeführte Fix prüft Signaturen wallet-eigener Inputs, bevor Mempool-Transaktionen zum lokalen Verlauf hinzugefügt; unbestätigte eingehende Zahlungen lassen sich bis zur Blockchain-Bestätigung nicht vollständig durch die Wallet verifizieren.
  • •Electrum rät Nutzern, die nicht aktualisieren können, Output-Adressen und Beträge vor jeder Signatur zu prüfen, einschließlich Gebührenerhöhungen; Nutzer, die sich nur mit eigenen Servern verbanden, waren nie betroffen.
Rogue-Electrum-Server tauschten gesendete Zahlungen gegen gefälschte Zero-Fee-Bitcoin-Transaktionen aus; Fix in 4.8.3 veröffentlicht

Böswillige Electrum-Server haben die kurz zuvor gesendeten Bitcoin-Zahlungen von Nutzern durch gefälschte Zero-Fee-Transaktionen ersetzt, die an optisch ähnliche Adressen zahlen – in der Annahme, dass Opfer die Gebühr erhöhen und die Version des Angreifers signieren würden. Electrum hat am 24. Oktober die Version 4.8.3 veröffentlicht, um die Schwachstelle mit hoher Schwere zu beheben. Der Maintainer SomberNight veröffentlichte am selben Tag den Hinweis GHSA-6jp4-8v48-cc5v und bat die Nutzer, zu aktualisieren.

Wie der Angriff funktioniert

Electrum ist ein Light Client: Er betreibt keinen vollständigen Bitcoin-Knoten und ist für Informationen über unbestätigte Mempool-Transaktionen auf seinen Server angewiesen, wie die eigene Dokumentation des Projekts erklärt. Wenn ein Nutzer eine Transaktion (tx1) signiert und sendet, kann ein bösartiger Server diese abfangen und der Wallet eine andere Transaktion (tx2) übergeben, die das Geld an eine Angreifer-Adresse sendet.

Tx2 trägt ungültige Signaturen. Ältere Electrum-Versionen überprüften die Signaturen von Mempool-Transaktionen nicht, sodass die Wallet tx2 als ausstehend anzeigte und tx1 verbarg. Replace-By-Fee (RBF) erlaubt einem Sender, eine unbestätigte Transaktion mit höherer Gebühr erneut zu übertragen. Wird die Gebühr der Fälschung erhöht, signiert die Wallet die Version des Angreifers mit einer gültigen Signatur. So wird ein routinemäßigern Schritt – das Erhöhen der Gebühr bei einer scheinbar hängenden Zahlung – zum Moment, in dem die eigene Wallet des Opfers die Transaktion des Angreifers signiert.

Gefälschte Adresse endete wie das legitime Ziel auf GyQ3

Eines der Ziele, bekannt als dannydeezy, dokumentierte den Angriff. Das Setup war ein 2-von-3-Legacy-P2SH-Multisig mit zwei Trezors, 31 Inputs und einem Output. Der Nutzer prüfte den Output auf beiden Trezors und sendete dann. Die Trezors verifizierten die echte Transaktion, bevor sie die Wallet verließ; die Version des Angreifers erschien erst danach, übergeben vom bösartigen Server, sodass die Prüfungen auf dem Gerät sie nie sahen. Der Wallet-Verlauf zeigte anschließend den Gesamtbetrag an eine unbekannte Adresse als unätigt, und der Eintrag wechselte später zu "Local.". In Electrum markiert "Local" eine Transaktion, die nur der Wallet bekannt und im Netzwerk nicht sichtbar ist.

Die Fälschung reproduzierte Inputs, Version und Locktime der echten Transaktion mit byteidentischen scriptSigs auf allen 31 Inputs. Alle 62 Signaturen waren gegenüber der echten Transaktion gültig; gegenüber der Fälschung war keine gültig. Fast das gesamte Geld ging an eine optisch ähnliche Adresse, ein kleiner Betrag wurde an eine der bereits genutzten Adressen der Wallet selbst zurückgesendet.

Die Fälschung endete auf GyQ3 – ebenso wie das echte Ziel. Der Angreifer hatte eine Adresse gefunden, die auf die letzten vier Zeichen der korrekten Adresse passte. ZachXBT hatte bereits auf einen ähnlichen Address-Poisoning-Betrug aufmerksam gemacht, der Nutzer der Phantom-Wallet betrifft; gefälschte Adressen sind so gestaltet, dass ein flüchtiger Blick auf die ersten und letzten Zeichen nicht genügt.

Version 4.8.3 prüft Signaturen nur bei wallet-eigenen Inputs

Ein anderer Nutzer, Raju-K12, meldete am 18. Oktober privat, dass er die Gebühr der Fälschung erhöht hatte und Geld verlor. Laut den Maintainern führen einige Server den Angriff in freier Wildbahn durch.

Commit 90fe308 ergänzt eine Prüfung der Signaturen bei wallet-eigenen "is_mine"-Inputs, bevor eine Mempool-Transaktion zum lokalen Verlauf hinzugefügt wird. Version 4.8.3 wurde am 23. Oktober als Git-Tag versehen, die Binärdateien wurden am Folgetag veröffentlicht.

Electrum prüft weiterhin nur Inputs, die die Wallet kontrolliert; unbestätigte eingehende Transaktionen bleiben daher ungeprüft, da der Client keinen vollständigen Skript-Interpreter besitzt. Für Empfänger bedeutet das: Eine ausstehende eingehende Zahlung kann allein durch die Wallet nicht vollständig verifiziert werden, bis sie in der Blockchain bestätigt wird. Electrums Ausweichlösung für alle, die nicht aktualisieren können, lautet, Output-Adressen und Beträge zu prüfen, bevor irgendetwas signiert wird – auch Gebührenerhöhungen. Nutzer, die sich ausschließlich mit eigenen Servern verbunden hatten, waren nie betroffen.

Electrum hat in der Vergangenheit bereits Notfall-Fixes veröffentlicht. Im Januar 2018 schloss das Projekt eine JSON-RPC-Schnittstelle, die rund zwei Jahre offen gewesen war, nachdem der Google-Forscher Tavis Ormandy herausgefunden hatte, dass eine Website den Port erkennen und Gelder abziehen könnte. Cryptopolitan berichtete, dass im Juli eine Warnung zu einem Coldcard-Fehler bei der Seed-Generierung kam – am selben Tag, an dem etwa 594 BTC, rund 38 Millionen Dollar, aus ungefähr 500 Wallets abgeflossen waren.