Der Rechnungsstandard BOLT11 verlangt nun genau einen Zahlungs-Hash und ein Zahlungsgeheimnis. Fehlen Felder oder treten sie mehrfach auf, muss die Zahlung fehlschlagen. Lightning-Entwickler beschlossen die Änderung am 19. Okt., nachdem ein gemeldeter Angriff gezeigt hatte, wie widersprüchliche Rechnungs-Parser abgeschlossene Bitcoin-Auszahlungen als unbezahlt erscheinen lassen konnten. Der Bericht zum Vorfall enthielt weder ein Datum noch eine Schadenssumme.
Warum das wichtig ist
Die Schwachstelle lag darin, dass Softwarekomponenten dieselbe signierte Zahlungsanforderung unterschiedlich auslasen. Ein Parser konnte das erste Feld mit dem Zahlungs-Hash auswählen, während ein anderer das letzte verwendete. Ein Dienst konnte eine Auszahlung daher unter einem Hash verbuchen, während sein Node die Zahlung unter einem anderen ausführte. Dadurch konnte das Abrechnungssystem eine abgeschlossene Auszahlung als unbezahlt behandeln und möglicherweise eine weitere Auszahlung veranlassen.
Die neue Regel gilt sowohl für Zahlungs-Hashes als auch für Zahlungsgeheimnisse. Implementierungen müssen die Anzahl der Feldvorkommen zählen, einschließlich wiederholter identischer Werte, anstatt sie zu einem Eintrag zusammenzufassen. Eine Rechnung mit zwei unterschiedlichen Hashes und eine Rechnung, die denselben Hash wiederholt, sind nach der aktualisierten Spezifikation beide ungültig.
Auswirkungen auf den Markt
Die unmittelbaren Auswirkungen sind operativer Natur und kein direktes Signal für den Bitcoin-Preis. Zahlungsdienstleister müssen mehrdeutige Rechnungen ablehnen und sicherstellen, dass die Abrechnung bei Auszahlungen demselben Zahlungs-Hash folgt, den der Node verwendet. Die Änderung verdeutlicht zudem ein allgemeineres Risiko in der Krypto-Infrastruktur: Signierte Daten können weiterhin Fehler verursachen, wenn verschiedene Programme ihre Felder uneinheitlich interpretieren.
Die Node-Software lnd führte die Ablehnung doppelter Hashes am 23. Sept. zusammen. Die Releases v0.20.5-beta und v0.21.4-beta enthalten diese Korrektur. Ein separater Vorschlag zur Prüfung von Zahlungsgeheimnissen und weiteren Decoder-Prüfungen war am 27. Okt. noch offen. Eine erfolgreiche Dekodierung allein garantiert nicht, dass eine Zahlung abgeschlossen wird.
Häufig gestellte Fragen
-
Was wurde am BOLT11-Rechnungsstandard geändert?
BOLT11 verlangt nun genau einen Zahlungs-Hash und ein Zahlungsgeheimnis. Fehlende oder wiederholte Felder müssen dazu führen, dass die Rechnung abgelehnt wird.
-
Wie konnten widersprüchliche Parser eine Bitcoin-Auszahlung als unbezahlt erscheinen lassen?
Ein Parser konnte den ersten Zahlungs-Hash verwenden, während ein anderer den letzten nahm. Ein Dienst konnte dadurch einen anderen Hash verbuchen als den, den sein Node zur Ausführung der Zahlung verwendete.
-
Welche Art von Angriff führte zur Änderung der BOLT11-Regel?
Ein gemeldeter Angriff auf einen Telegram-Peer-to-Peer-Bot nutzte Unterschiede zwischen Rechnungsbibliotheken aus. Dadurch erschienen abgeschlossene Bitcoin-Auszahlungen als unbezahlt, was weitere Auszahlungen ermöglichen konnte.
-
Welche lnd-Releases enthalten die Ablehnung doppelter Hashes?
Die Korrektur für doppelte Hashes wurde am 23. Sept. zusammengeführt und ist in lnd v0.20.5-beta sowie v0.21.4-beta enthalten.
-
Sind die Prüfungen von Zahlungsgeheimnissen in lnd bereits abgeschlossen?
Nein. Ein separater lnd-Vorschlag zur Validierung von Zahlungsgeheimnissen und weiteren Decoder-Prüfungen war am 27. Okt. noch offen.