重复输入漏洞 - Duplicate inputs vulnerability

也涵盖 CVE-2018-17144

CVE-2018-17144 是一个可能允许攻击者多次花费相同比特币的漏洞。

比特币核心 0.14.0 中包含的一个优化跳过了对新接收区块的检查,这个检查被认为是多余的,使节点愿意部分处理尝试多次花费同一个输入的区块。这将触发一些用来捕捉节点意外操作的代码,并导致节点故意崩溃。这允许了一种拒绝服务攻击,可以被矿工利用。

用来捕捉意外操作的代码(一个断言)在比特币核心 0.15.0 中被重写,无意中允许节点在输入重复的情况下继续操作。这允许矿工多次花费相同的比特币。

该漏洞于 2018 年 9 月 17 日由开发者 Awemany 发现并负责任地披露。补丁在几小时内就可用,并在 36 小时内为当前发布分支提供了二进制版本——两者都只提到了 DoS 漏洞。在几位审查补丁的开发者能够逆向工程漏洞并发现通胀风险后,比特币核心开发者于 2018 年 9 月 20 日进行了完整披露。

这个漏洞从未在比特币主网上被利用,绝大多数完整节点随后更新到了不受影响的比特币核心版本。

在完整披露之后,该漏洞在比特币测试网上被利用,导致仍在运行比特币核心 0.14.x 的任何节点崩溃,并使运行 0.15.0 至 0.16.2 的节点接受了一笔多次花费相同资金的交易。当测试网矿工设法生成了比无效链更多工作量证明的有效链时,这些未升级的节点试图切换到新链,但无法完全取消一个双重花费输入。这使得旧的测试网节点卡在了一个较低工作量证明的区块链上,需要手动用户干预才能修复。

主要代码和文档

Optech 新闻简报和网站提及

2019

2018

Last updated