BTCPay Server 热钱包遭窃,已在 2.4.2 修复
攻击者利用 2.4.2 中已修复的漏洞,从运行 BTCPay Server 2.4.1 及更早版本的热钱包中窃取了 Bitcoin 和 Litecoin;请在新服务器上重建。
TL;DR
- 攻击者利用 2026 年 8 月 7 日在 2.4.2 中修复的漏洞,从运行 BTCPay Server 2.4.1 或更早版本的服务器的热钱包中窃取了 Bitcoin 和 Litecoin。厂商于 2026 年 11 月 2 日披露了这些盗窃事件。
- 2.4.2 之前的每一个版本都受影响,包括 2.4.2 的候选发布版本。8 月的攻击接管了 LND 闪电网络节点;11 月的盗窃掏空了服务器的链上热钱包。
- 厂商将该漏洞定为 critical,并报告了 8 月以及 2026 年 11 月 1 日的资金被盗。没有分配 CVE,而且截至 2026 年 11 月 3 日该漏洞不在 CISA 的 KEV 目录中。
- 如果您运行 2.4.1 或更早版本,请先扫出资金,再迁移到带新钱包的新服务器。原地升级无法移除攻击者可能已经获得的访问权限。参见“如何修复?”。
您是否受影响?
满足以下全部条件时您处于暴露状态:
- 您的部署运行 BTCPay Server 2.4.1(2026 年 7 月 23 日发布)或任何更早版本。厂商公告指出,2.4.2 之前的每个版本(包括 2.4.2 候选发布版本)都存在该漏洞。
- 实例在运行受影响版本期间可以从互联网访问。厂商表示尚未确定攻击者何时开始利用该漏洞。
- 此后您没有重建过服务器。即使在厂商 11 月 1 日的警告之后从受影响版本升级且未发现被盗,厂商的恢复指导仍然适用。
托管实例也在范围内:11 月 1 日,厂商要求包括 LunaNode 在内的托管服务商出于预防目的将 BTCPay Server 实例下线。请联系您的服务商以迁移到新的虚拟机。
支出密钥保存在服务器之外的钱包(包括硬件钱包)的资金未受这些盗窃影响。向此类钱包收款仍是厂商推荐的做法。
| 版本 | 是否受影响 | 怎么办 |
|---|---|---|
| 2.4.1 及更早的所有版本(包括 2.4.2 候选发布版本) | 是,存在漏洞 | 迁移到带新钱包的新服务器并运行当前版本 |
| 2.4.2,发布于 2026-08-07 | 否,修复了漏洞 | 更新到当前版本 |
| 2.4.3 至 2.4.7,当前版本为 2026-10-29 | 否 | 继续保持更新 |
受影响版本错失了其后发布的所有安全修复:2.4.3 到 2.4.7 在 2026 年 10 月 29 日之前持续交付了安全与加固变更。仅 2.4.7 一个版本就修复了通过 Anthropic 的 OSS Scanner 报告的 85 个安全发现。
尽管该项目有 7,888 个 GitHub star、官方 Docker 镜像有 4,131,130 次拉取,该漏洞却没有 CVE,也没有 GitHub 安全公告,因此版本扫描器无法标记受影响范围。
检查您运行的是什么:
# Vendor's check: log in and read the version shown at the bottom of the page.
# Docker deployments: list the running container and its image tag
docker ps --format 'table {{.Names}}\t{{.Image}}' | grep -i btcpay
# If the tag reads "latest" or gives no version, the page footer is authoritative.
如何修复?
- 如果您运行 2.4.1 或更早版本,请遵循厂商的恢复步骤,而不是原地升级:
- 创建一个新钱包,把热钱包剩余的资金扫入其中。使用受信任的设备和新的种子;在新服务器上复用旧种子会让这些资金继续处于风险中。
- 将旧服务器下线,并在替换之前保留与调查相关的日志和交易记录。
- 准备一台全新的虚拟机,从受信任的来源安装最新受支持的版本并连接新钱包。不要把整台旧服务器恢复到新机器上。
- 从受信任的设备上,撤销并更换旧服务器能够访问的每一项凭据。不要在旧机器上输入新凭据。厂商列举的凭据包括:
- 托管和 SSH 凭据
- 应用和 API 凭据
- Lightning 凭据
- 如果您的服务器在 11 月 1 日已经运行 2.4.2 或更高版本,厂商没有在这些服务器上看到攻击影响。仍然要更新到当前版本,因为 2.4.7 修复了另外 85 个安全发现。
- 标准安装请使用厂商的更新路径(Server Settings,然后 Maintenance,然后 Update),并确认页面底部显示了新版本。
- 集成方还应按 2.4.2 发布说明的建议将 NBXplorer 更新到 2.6.10。
该漏洞本身没有配置层面的临时规避方案。8 月,厂商给无法更新的 LND 用户的临时建议是将服务器下线。受影响的 LND 部署绝不应保持可从互联网访问。
根本原因是什么?
BTCPay Server 在同一天关闭了两处暴露:控制器上的 public 辅助方法可作为 HTTP 端点被路由,以及参考 Docker 部署将 LND 的 API 通过公共域名代理出去。厂商表示暂不公布技术细节,以便给运维者留出更新时间。
服务器端的修复是提交 6689cad419"Disabled unwanted routes",由维护者 Nicolas Dorier 于 2026 年 8 月 7 日直接推送,没有拉取请求,也没有变更日志条目。它为控制器上的五个 public 辅助方法加上 [NonAction] 属性,包括下面这个:
// BTCPayServer/Controllers/UILNURLController.cs, before 2.4.2
public async Task<IActionResult> GetLNURLRequest(
string cryptoCode,
Data.StoreData store,
...)
// after 2.4.2
[NonAction]
public async Task<IActionResult> GetLNURLRequest(
string cryptoCode,
Data.StoreData store,
...)
ASP.NET Core 会把控制器类上每个 public 方法映射为可路由的 HTTP 端点,除非该方法带有 [NonAction]。这五个辅助方法分布在 LNURL、LNURL-authentication、stores、email-rule 和 subscription 控制器上。每一个都是本不应接收请求的内部构件。
同一天,docker 仓库的提交"Do not expose LND anymore"删除了把公共域名直接代理到闪电节点的两个 nginx location:
# Production/nginx.tmpl in btcpayserver-docker, removed on 2026-08-07
location ~* ^/(lnrpc|routerrpc|verrpc|walletrpc)\. {
grpc_read_timeout 6000s;
grpc_send_timeout 6000s;
grpc_pass grpcs://lnd_bitcoin:10009;
}
location /lnd-rest/btc/ {
rewrite ^/lnd-rest/btc/(.*) /$1 break;
proxy_pass http://lnd_bitcoin:8080/;
}
同一天的第三个提交点明了漏洞类别。在撤销一个相关的删除时,维护者 Andrew Camilleri 写道,另一种闪电网络实现 CLN"is not affected by the LNURL issue"。BTCPay 通过 Unix 套接字和 runes 连接 CLN,用他的话说"there is no macaroon for that code path to read"。他的消息指出,LNURL 代码路径会读取 LND 的 macaroon。
8 月的公告描述了后果:未经身份验证的远程攻击者能够获取 LND 的 .macaroon 凭据文件。
如何被利用?
厂商的两篇帖子描述了攻击路径;不存在公开的概念验证,厂商也没有公布攻击者发送的请求:
- 攻击者通过互联网到达受影响的服务器。8 月的公告指出,获取 .macaroon 凭据文件不需要身份验证。
- 在 8 月的攻击中,攻击者获取了 .macaroon 文件,这些文件携带对 LND 节点的已认证访问。厂商审查的攻击只针对扩展名为 .macaroon 的文件,并指出这些凭据可用于接管节点并转移资金。
- 在 11 月的攻击中,攻击者用厂商的话说使用了"a different method to exploit the vulnerability fixed in 2.4.2"。盗窃从服务器的链上热钱包取走了 Bitcoin 和 Litecoin,厂商没有描述该手法。
- 支出这些资金不需要进一步的访问,因为热钱包把支出所需的密钥存在服务器本身。支出密钥保存在服务器之外的钱包未受影响。
攻击如何展开?
一个未经身份验证的请求到达了厂商从未打算暴露的路由,攻击者取走 LND 的 macaroon 凭据,或者在 11 月直接取走链上热钱包的资金。
未认证请求"] --> B["可路由的控制器辅助方法
缺少 NonAction 属性"] B --> C["LNURL 代码路径读取
LND 的 macaroon"] C --> D["8 月:.macaroon 文件被窃、
LND 节点被接管、
资金被转移"] B --> E["11 月:针对同一漏洞的
另一种手法"] E --> F["链上热钱包被掏空:
Bitcoin 和 Litecoin"]
攻击者能做什么?
8 月的攻击接管了一个 LND 节点并转移其资金,包括该节点自身拥有的链上钱包。11 月的攻击从服务器的链上热钱包窃取了 Bitcoin 和 Litecoin,而厂商在审查 8 月的攻击时曾评估这些钱包不受影响。
一旦进入,攻击者就被视为拥有整台机器。厂商告诉任何资金被盗或发现未授权访问迹象的人,将整个服务器及其存储的所有机密视为已失陷。相同的恢复步骤适用。
两个条件界定了影响范围。服务器必须运行 2.4.1 或更早版本。只有服务器自身能够支出的资金处于风险中,因此硬件钱包和保存在别处的其他密钥都不受波及。
修复为什么有效?
2.4.2 关闭了两处暴露。[NonAction] 属性将五个辅助方法从路由中移除,使它们无法再接收请求。nginx 的变更将 LND 的 gRPC 和 REST 接口从公共域名上移除。
已记录的代价是 Zeus 等外部钱包无法再通过 BTCPay 域名访问 LND。厂商计划在安全时恢复该路径。
同一天的两项变更使已被窃取的东西失效。docker 仓库将 LND 升级到 0.21.1,8 月 7 日加入的 LND_MACAROON_ROTATION_ID 设置会重新生成 macaroon。更新之前获取的 macaroon 文件会失效。
该修复对于提交关闭的两处暴露是完整的,但无法移除攻击者已经获得的访问。这就是厂商要求受影响版本的运维者迁移到新服务器而不是原地升级的原因。
2.4.2 还修复了可通过 Greenfield Basic 身份验证利用的 TOTP 双因素身份验证绕过漏洞。它在账户创建五分钟后默认禁用 Basic 身份验证。
如何检查是否被入侵?
先检查版本:登录并读取页面底部。然后检查区块链和您的闪电节点:
- 厂商公布了事件报告中识别出的两个目标地址。查找向 Bitcoin 地址 bc1p0f7wmcnesrapznymf9ljdn04pudgmh96sqtrm9vmgqxdh666fh8qvn63r7 或 Litecoin 地址 ltc1qp49tmfdueyaqrmgrx0uyx4uegyygt8yt02whee 的转出交易。
- 把一次匹配当作众多线索之一。厂商警告这些地址上的部分活动似乎早于其报告中描述的盗窃,因此其余额和历史不是已确认的损失总额。
- 如果您正在或曾经使用 LND,请执行厂商 8 月公告中的四项检查:
- 您没有进行过的付款
- 意外的通道关闭或陌生的对等节点
- 链上和通道余额与您自己的记录核对
- 任何您不认识的活动
- 钱包余额未变并不能排除早前的攻击。如果服务器运行过 2.4.1 或更早版本且可被访问,请将机器及其所有机密视为已失陷。保留日志,然后按“如何修复?”中的步骤操作。
时间线
- 2026-07-23:BTCPay Server 2.4.1 发布,是携带该漏洞的最后一个版本。
- 2026-08-06 至 2026-08-07:维护者跨服务器和 docker 仓库提交复合修复:"Disabled unwanted routes"、"Do not expose LND anymore" 以及 macaroon 轮换。
- 2026-08-07:BTCPay Server 2.4.2 发布。公告指出攻击者已经利用该漏洞且已有资金被盗。
- 2026-08-24:2.4.3 作为面向多用户共享服务器的安全版本发布。
- 2026-09-07:2.4.4 交付结账和商店加固变更。
- 2026-10-06:2.4.5 默认阻止出站请求的专用网络目标。
- 2026-10-26:2.4.6 加固 API 权限、不可信输入、生成的链接和浏览器操作。
- 2026-10-29:2.4.7 修复通过 Anthropic 的 OSS Scanner 报告的 85 个安全发现。
- 2026-11-01:事件报告中描述的一次钱包被盗发生于 13:46 UTC。第一份盗窃报告于 20:56 UTC 通过邮件送达,厂商于 22:25 UTC 向社区发出警告。
- 2026-11-02:厂商将 2.4.1 及更早版本认定为受影响版本并发布恢复指导。
FAQ
我不使用 LND。我仍有风险吗?
厂商审查的 8 月攻击只针对 LND 的 macaroon 文件,其他闪电网络实现的用户没有暴露于该凭据风险。11 月的盗窃从运行 2.4.1 或更早版本的服务器的链上热钱包中取走了 Bitcoin 和 Litecoin。恢复指导现在适用于每个受影响的部署,而不只是 LND 用户。
我在 11 月 1 日的警告之后更新到了 2.4.2 或更高版本。我安全吗?
对于在警告发出时已运行 2.4.2 或更高版本的服务器,厂商没有看到攻击影响。如果您是在该警告之后从 2.4.1 或更早版本升级的,厂商仍然要求您迁移到带新钱包的新服务器。升级无法移除攻击者可能已经获得的访问。
有可以扫描的 CVE 吗?
没有。截至 2026 年 11 月 3 日,没有分配 CVE,GitHub 仓库也没有安全公告,因此依赖扫描器无法标记受影响范围。页面底部显示的版本是唯一的版本检查手段,“如何修复?”中的步骤才是应对办法。
我的硬件钱包资金安全吗?
是的。支出密钥保存在服务器之外的钱包(包括硬件钱包)中的资金未受这些盗窃影响。厂商仍然建议重建老旧服务器,即使您把钱包密钥保存在别处,因为攻击者可能持有对该机器的其他访问。
2.4.2 之后的版本改了什么?
它们是安全和加固版本。2.4.5 默认阻止闪电连接、LNURL 请求、发票通知 URL 和 webhook 的专用网络目标。2.4.7 修复了通过 Anthropic 的 OSS Scanner 报告的 85 个安全发现:1 个 critical、13 个 high、52 个 medium 和 19 个 low。
用 Ostorlab 找出暴露的支付服务器
Ostorlab 的攻击面发现会盘点您暴露在互联网上的主机及其提供的服务。用它列出哪些服务器运行自托管支付处理器,并优先核对这些版本。
参考文献
- BTCPay Server 博客,"Security Incident Affecting BTCPay Server 2.4.1 and Earlier",2026 年 11 月 2 日,盗窃报告、恢复步骤、时间线和目标地址:https://blog.btcpayserver.org/btcpay-server-security-incident-2-4-1-and-earlier/ (2026 年 11 月 3 日核对)
- BTCPay Server 博客,"Security Advisory: Update BTCPay Server to 2.4.2 Immediately",2026 年 8 月 7 日,未经身份验证的 .macaroon 窃取、LND 范围、致谢和临时建议:https://blog.btcpayserver.org/security-advisory-btcpay-server-2-4-2/ (2026 年 11 月 3 日核对)
- btcpayserver 提交 6689cad41979c73f769fd42e38268fed1fa800fa,"Disabled unwanted routes",Nicolas Dorier,2026 年 8 月 7 日,五处 [NonAction] 添加:https://github.com/btcpayserver/btcpayserver/commit/6689cad41979c73f769fd42e38268fed1fa800fa (2026 年 11 月 3 日核对)
- btcpayserver-docker 提交 21ea2e122ae5bc453ad1c0a4d6d6b6dd094dcca2,"Do not expose LND anymore",Nicolas Dorier,2026 年 8 月 7 日,被删除的 nginx location:https://github.com/btcpayserver/btcpayserver-docker/commit/21ea2e122ae5bc453ad1c0a4d6d6b6dd094dcca2 (2026 年 11 月 3 日核对)
- btcpayserver-docker 提交 c48919f9ae51c714078076e7912dd153ba0bb01f,"Revert 'Do not expose CLN REST anymore'",Andrew Camilleri,2026 年 8 月 7 日,"LNURL issue" 类别描述和 macaroon 代码路径:https://github.com/btcpayserver/btcpayserver-docker/commit/c48919f9ae51c714078076e7912dd153ba0bb01f (2026 年 11 月 3 日核对)
- btcpayserver-docker 提交 4caadeb0c3a31f88ca1a4ee46fd63d8b9db093c0,"Triggering macaroon regeneration",rockstardev,2026 年 8 月 7 日,LND_MACAROON_ROTATION_ID 设置:https://github.com/btcpayserver/btcpayserver-docker/commit/4caadeb0c3a31f88ca1a4ee46fd63d8b9db093c0 (2026 年 11 月 3 日核对)
- BTCPay Server v2.4.2 发布说明,2026 年 8 月 7 日,利用声明、致谢、TOTP 绕过修复和 NBXplorer 2.6.10 建议:https://github.com/btcpayserver/btcpayserver/releases/tag/v2.4.2 (2026 年 11 月 3 日核对)
- BTCPay Server v2.4.7 发布说明,2026 年 10 月 29 日,Anthropic 的 OSS Scanner 按严重程度给出的 85 个安全发现:https://github.com/btcpayserver/btcpayserver/releases/tag/v2.4.7 (2026 年 11 月 3 日核对)
- BTCPay Server v2.4.1 发布,2026 年 7 月 23 日:https://github.com/btcpayserver/btcpayserver/releases/tag/v2.4.1 (2026 年 11 月 3 日核对)
- BTCPay Server v2.4.5 发布说明,2026 年 10 月 6 日,默认阻止专用网络目标:https://github.com/btcpayserver/btcpayserver/releases/tag/v2.4.5 (2026 年 11 月 3 日核对)
- btcpayserver/btcpayserver 仓库(7,888 star)及其 Docker Hub 镜像(4,131,130 次拉取),规模数字:https://github.com/btcpayserver/btcpayserver 和 https://hub.docker.com/r/btcpayserver/btcpayserver (2026 年 11 月 3 日核对)
- The Hacker News,"Hackers Exploit BTCPay Server Flaw to Steal Bitcoin and Litecoin From Hot Wallets",2026 年 11 月 3 日,Zeus 访问说明和托管服务商关停:https://thehackernews.com/2026/11/hackers-exploit-btcpay-server-flaw-to.html (2026 年 11 月 3 日核对)
- CISA KEV 目录 JSON 源,2026 年 11 月 3 日核对 BTCPay Server 条目(无):https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json (2026 年 11 月 3 日核对)