比特币钱包 Electrum 本周末修复了一个高严重性漏洞,该漏洞允许流氓服务器操纵待处理的比特币交易并将资金重定向到攻击者控制的地址。该缺陷影响 4.8.3 之前的所有版本,现已推出。

至少一名用户已确认因该漏洞而蒙受损失。

Electrum 是最古老的比特币软件钱包之一。该攻击利用钱包的信任模型来进行未经确认的交易。当用户通过受感染的服务器广播付款时,服务器可以抑制真实交易并注入虚假的冲突交易 - 显示攻击者的输出地址和零费用,使付款看起来被卡住。

由于 Electrum 不会验证来自服务器的未确认交易的签名,因此欺骗交易在钱包的历史记录中显示为合法交易。

当用户费用上涨,看起来像是支付停滞时,他们会签署并广播一个全新的有效交易——其输出地址属于攻击者。真正的付款从未发送;费用上涨是实际进入网络的第一笔交易,它向攻击者支付费用。

发布该报告的 Electrum 开发者 SomberNight 指出,攻击者可以修改虚假交易的输出地址,以匹配用户预期目的地的最后四个字符。任何人只要抽查长比特币地址的尾部就会看到明显的匹配。

该通报指出,“一些服务器正在野外执行这种攻击”,并得到了两份用户报告的支持。一位名为 dannydeezy 的用户于 10 月 11 日首次标记了可疑的服务器行为;被操纵的交易从未传播通过本地服务器,因此没有资金损失。第二位用户 Raju-K12 在 10 月 18 日报告了在操纵交易中提高费用后确认的损失。

4.8.3 中的补丁通过在将任何未经确认的交易添加到本地历史记录之前验证钱包拥有的输入上的加密签名来关闭主要攻击面。如果不提供攻击者无法伪造的有效签名,服务器将无法再注入触及用户自己地址的虚假交易。该修复已于 10 月 23 日在存储库中标记,并于第二天发布了二进制文件。

来自外部发件人的传入交易(其中所有输入都不属于用户的钱包)仍会被接受,无需签名验证。 SomberNight 承认咨询中存在这一差距,并指出需要开展更多工作来弥补。

这不是 Electrum 的第一次牛仔竞技表演,它过去也曾处理过恶意攻击。 2018 年的一次活动使用流氓服务器推送虚假更新通知,到 2020 年,该活动已从 Electrum 用户那里损失了约 2500 万美元。 Electrum 的开放服务器模型(任何人都可以运行节点)使得此类攻击成为可能。

专门连接到自己运行的服务器的用户不受影响。任何无法立即更新的人都应在签署任何交易之前手动验证输出地址和金额; Electrum 4.8.3 可在 electrum.org 以及该项目的 Github 上获取。