News

Stolen macaroons drained BTCPay Lightning nodes

BTCPay Server 2.4.2, released 7 August 2026, closed a hole that let an unauthenticated remote attacker read LND credential files off a merchant's server. Anyone holding the admin one can move the node's money, which is what happened.

5 min readPayment Processors
Stolen macaroons drained BTCPay Lightning nodes

What happened

On 7 August 2026 the BTCPay Server project published a security advisory telling operators to update immediately. The flaw, present in every version before 2.4.2, "could allow an unauthenticated remote attacker to obtain .macaroon credential files for LND", and those credentials "could be used to take control of an LND node and move funds". The advisory does not describe this as a possibility: "We have confirmed that attackers exploited this vulnerability. Users were affected and funds were stolen."

What it changes

A macaroon is not a password. It is a bearer credential, and LND's own documentation is unambiguous about what that means: "Sharing a macaroon allows anyone in possession of that macaroon to use it to access the service (in our case, lnd) to do anything permitted by the macaroon" (macaroons.md). LND writes three of them to disk on startup. The one called admin.macaroon "contains a macaroon with no caveats", which is the documentation's way of saying it can do everything.

There is no login step to fail, so reading the file is the whole attack. A password would have to be tried against a service that could rate-limit it or refuse it. A macaroon presented to the node is simply valid, because validity is a property of the bytes rather than of who is holding them.

The same LND document had already named the exposure: the macaroon files "are unencrypted and in case of the admin.macaroon provide full access to the daemon. This can be seen as quite a big security risk if the lnd daemon runs in an environment that is not fully trusted." It goes further, calling them "the only files with highly sensitive information that are not encrypted", unlike the wallet file and the macaroon database, which "are always encrypted, even if no password is used". LND ships a stateless initialization mode that writes no macaroon files at all, for exactly this reason. Every merchant running a Lightning node through BTCPay had that file on the same server as a web application reachable from the internet.

The remediation is correspondingly blunt. Updating to 2.4.2 also moves LND to 0.21.1 and regenerates the macaroons, which invalidates any copy an attacker took. Version 2.4.2 also "temporarily removes public access to the LND API on Docker deployments", so an external wallet such as Zeus can no longer reach the node through the BTCPay domain or its onion address. That is a working feature switched off deliberately while the incident is live.

On 10 August the project published its response, confirming that the vulnerability "allowed an attacker to obtain LND admin macaroon credentials from affected instances and use them to access connected LND wallets". The BTCPay Server Foundation said it would donate 0.21 BTC each to Craig Raw, who reported the flaw, and to the Bitcoin Red Team fund, and that supporters had committed to a recovery bounty of "10% of the amount recovered, up to a maximum of 3 BTC for full recovery of the funds".

What it does not change

It did not reach BTCPay's on-chain wallets. The advisory is specific, and corrects its own earlier caution: after further review the project confirmed "that only LND is impacted", and that "BTCPay Server's on-chain wallets, including hot wallets, are not affected". The exception is worth reading twice, because it is easy to mistake for the opposite: funds in LND's own on-chain wallet are part of the affected node and may still be at risk.

It does not reach other Lightning implementations. An operator running Core Lightning or Eclair behind BTCPay was never exposed to this particular credential risk, and the project says so rather than telling everyone they were breached.

Updating does not close a door you opened yourself. If the node is reachable through an operator's own reverse proxy, Tor service or forwarded port, "updating BTCPay Server does not close access paths that you manage separately", and those credentials still need rotating by hand. Neither does rotation undo the theft: new macaroons stop the old copies working, and the coins that already moved are gone.

And the mechanism is still not public. The advisory withheld technical details "because operators still need time to update", and as of 25 August 2026 the project's blog carries nothing further, so how the file read was reached is not something this post can tell you. What is known is the shape of the outcome, not the bug.

Context

The lesson here is not about Lightning being unsafe. It is about what a credential file is once it is sitting on a machine that also answers requests from strangers. A signing key gets treated with ceremony. A .macaroon looks like configuration, and it carries the same authority.

That is also why the project's own advice, in a post about its own failure, is the ordinary advice: "keep funds in cold storage whenever possible. If you need a hot wallet for daily operations, regularly move excess funds to cold storage." A merchant node has to be hot to accept payments, which fixes the question at how much sits in it rather than whether it is exposed. The custody tradeoff does not disappear because the software is good; it moves to the balance.

The disclosure came from the same direction as several stories this month. Stratum V2's transport hardening and a splice input LDK now rejects both credit named audit teams, and the Bitcoin Red Team appears in this incident too. The difference is that those arrived as patches before anyone lost anything, and this one did not.

Newsletter

Bitcoin, without the noise

What happened in Bitcoin, what it actually changes, and the sources so you can check us. One issue at a time, straight to your inbox.

  • One email per issue, never a drip campaign
  • No tracking pixels and no shared addresses
  • Unsubscribe from any issue in one click

Get the next issue

One email per issue, no tracking pixels, and unsubscribe from any of them. We do not share your address. Privacy policy