
Lightning tightens invoice rules after reported attack made Bitcoin withdrawals look unpaid
Lightning Network developers have updated BOLT11 invoice standards to require exactly one payment hash and one payment secret, following a reported attack that made completed Bitcoin withdrawals appear unpaid.
The updated BOLT11 specification, implemented on October 19, requires software to reject invoices with missing or repeated payment-hash and payment-secret fields. This change addresses a vulnerability where conflicting invoice parsers could make completed Bitcoin withdrawals appear unpaid, potentially allowing attackers to initiate further payouts.
Developer Roasbeef reported on September 10 that a Telegram peer-to-peer bot had been hacked through libraries choosing different payment hashes - some taking the first hash while others took the last. The service could track a withdrawal under one hash while its node executed payment using another, creating confusion about payment status.
Technical Implementation
The current BOLT11 specification requires exactly one payment-hash field (labeled 'p') and exactly one payment-secret field (labeled 's'). Invoices with missing or duplicate fields must be rejected. The Lightning node software lnd merged duplicate-hash rejection on September 23, with fixes included in v0.20.5-beta and v0.21.4-beta releases.
The failure sits in the connection between payment execution and the service's accounting.
Ongoing Developments
A separate proposal for payment-secret checks remained open as of October 27. Payment operators must now reject ambiguous invoices and ensure withdrawal accounting follows the same payment hash as the node. The broader Lightning community continues working to address potential vulnerabilities in the payment processing chain.