The Self-Custody Paradox: BTCPay's Leaked Macaroon and the $111 Million Coldcard Question
CryptoPanda
Over the past seven days, two different attack surfaces in the Bitcoin self-custody stack started bleeding. BTCPay Server confirmed active exploitation of an unauthenticated remote file read that exposes LND .macaroon credentials. Galaxy Research confirmed 1,719 BTC — roughly $111 million — disappeared from Coldcard user wallets. The Bitcoin protocol itself was not touched. The tools around it are the target.
Most coverage will treat these as two random security incidents. They are not. Both are failures of the same assumption: that self-custody is a single device or a single piece of software. It is a chain. BTCPay sits between a merchant and the Lightning Network. Coldcard sits at the end of a signing workflow. Attackers do not need to break the strongest link. They find the most neglected one.
BTCPay Server is an open-source payment processor that merchants run to avoid the KYC requirements and the 1-3% fees of custodial processors like BitPay. It connects to a Bitcoin node and, in many deployments, an LND node for Lightning payments. LND is the most widely used Lightning Network daemon. The .macaroon file is a bearer credential — an API master key. If an attacker obtains admin.macaroon, they do not need to crack a private key. They only need to call the RPC interface and move channel funds.
The attack chain is short. First, an unauthenticated remote file read in the BTCPay front-end lets the attacker pull LND's admin.macaroon. Second, the attacker uses that credential to control the LND node directly. Third, funds in open Lightning channels are swept to the attacker's node. Then the channel closes and the money is gone. No multisig, no additional approval, no rate limit. LND is designed for fast settlement. That design assumption becomes the vulnerability when the credential leaks.
I learned this pattern in 2017 while auditing smart contracts for a fund in São Paulo. Every privileged credential is a loaded gun. The code does not care whether the person holding the key is authorized. Code is law until the audit reveals the trap. The audit here is a patch: BTCPay Server 2.4.2 closes the file read, and LND 0.21.1 automatically regenerates macaroons on upgrade. That regeneration is the key detail. If you have upgraded, stolen credentials are dead. If you have not upgraded, assume they are already burned.
The bug lives in the BTCPay web server, not in Bitcoin Core and not in the LND daemon itself. But the impact model is what matters: a web-layer flaw becomes a node drain because the macaroon is a bearer credential. There is no IP allowlist, no second factor, no transaction cap. Once a request returns the file, control is total. For years, I have said the Lightning stack is only as strong as the invoice page that exposes it. This is that invoice page.
Official silence on the exploit details is not a failure. It is responsible disclosure. Publishing the exact path traversal while thousands of instances remain unpatched would hand the attacker a roadmap. The decision to tell users to disconnect LND if they cannot patch immediately is the right call. It also exposes the structural weakness of self-custody: the security timeline depends on the weakest operator. In 2020, I rebalanced positions every four hours and skipped node updates for weeks. I know how this works. Upgrade fatigue is not an excuse; it is an attack vector.
One nuance about the LND patch is often missed. Macaroons are bearer credentials with no revocation list. You cannot selectively invalidate a leaked file. The only clean reset is regeneration. That is why LND 0.21.1 rotates them on startup. It is not a feature; it is the only available clean break.
The Coldcard event is more opaque. Galaxy Research put the number at 1,719 BTC, roughly $111 million, with a preliminary estimate of $130 million or more. No attack vector has been disclosed. The hardware wallet is marketed as the highest-security cold storage option — the one you can use even on a compromised computer. That claim is now under stress. The most likely explanation is not that Coldcard's secure element was broken. The likely break is in the surrounding workflow: companion apps, SD card export, multisig coordination software, or the way users import descriptors. The uncertainty is the trade.
Here is the contrarian framing. These two events may be completely independent, but they share a common root: the gap between a secure design and an insecure workflow. BTCPay is open source and auditable. Coldcard is purpose-built for cold signing. Yet both were bypassed because something in the toolchain around them was allowed to rot. Attackers do not attack vision. They attack maintenance.
Two protocols, one lesson: the least exciting component of your stack is the one that kills you. For BTCPay, it was an unauthenticated file read. For Coldcard, it may be an SD card export or a companion app. Nobody gets paid to think about SD cards. Attackers do.
There are three hidden risks that the official narratives do not emphasize. First, the BTCPay attacker may have been harvesting macaroons for weeks before disclosure. If so, the reported losses are just the visible portion. Second, a stolen macaroon does more than move funds. It gives the attacker visibility into channel peer information, which can be used to fish for other vulnerable nodes. Third, if the Coldcard losses are not explained by a workflow bug, the damage may extend well beyond the reported 1,719 BTC. Private keys, once exposed, expose every UTXO they control.
Token economics here are simple: there are none. BTCPay has no token, no ICO, no investor unlock schedule. The real asset at stake is Bitcoin itself — either locked in Lightning channels or sitting in Coldcard-controlled UTXOs. The market impact of 1,719 BTC of sell pressure is negligible next to Bitcoin's daily volume. That does not mean the economic impact is small. The real invoice is on the cost of self-custody.
If you are a merchant running BTCPay, the 1-3% fee you saved by avoiding BitPay now has an implicit price: the hours you spend monitoring releases, reading security advisories, and testing upgrades. This event will push some users toward custodial processors. That is not a victory for centralization. It is a rational response to a trust discount on self-custody tools that lasts long after the price chart stops moving. Patience is for traders; timing is for killers. The time to upgrade was before the disclosure.
Market mechanics tell the same story. A $111 million theft in the Bitcoin ecosystem used to matter. The 2016 Bitfinex hack moved price by 20%. The 2022 Ronin Bridge hack moved AXS but barely touched Bitcoin. The 2023 Atomic Wallet hack moved nothing at the macro level. The market is desensitized to losses under $1 billion. If the attacker sells through OTC desks or mixers over weeks, the 1,719 BTC will leave no visible trace. Liquidity dries up when the music stops — not when the press release drops.
The ecosystem effect is more dangerous than the price effect. BTCPay and Coldcard occupy linked positions in the merchant workflow: BTCPay handles invoices and Lightning, Coldcard signs the cold-storage transactions. A BTCPay user who holds reserves in Coldcard is exposed twice. This is the bucket effect of self-custody. Security is only as strong as the most neglected tool in the chain. The market will reward one-click auto-update solutions, node monitoring services, and wallets that force users to re-validate signing policies. Expect that shift.
I have run nodes, audited smart contracts, and watched users lose money to upgrade fatigue. The lesson from both incidents is identical. The protocol is safe. The user's workflow is the battlefield. The question is not whether Coldcard's silicon is secure. The question is whether the software between the hardware and the transaction is clean. We do not know yet. That unknown is why self-custody remains a discipline, not a product.
Do this now. Upgrade BTCPay Server to 2.4.2. Update LND to 0.21.1 and let the macaroons regenerate. If you cannot patch today, disconnect LND and move channel funds to an on-chain address. Review every step of your Coldcard workflow and assume one of those steps is compromised. The next post-mortem may name the vector. The damage will already be done. Code is law until the audit reveals the trap.