完整披露
CVE-2018-17144 漏洞的修复程序已于 9 月 18 日在比特币核心版本 0.16.3 和 0.17.0rc4 中发布,该漏洞包含拒绝服务组件和严重的通货膨胀漏洞。最初,它仅被报告为拒绝服务漏洞,并于 9 月 17 日报告给几位比特币核心开发者以及支持其他加密货币(包括 ABC 和 Unlimited)的项目。然而,我们很快确定该问题也是一个具有相同根本原因和修复方案的通货膨胀漏洞。
为了鼓励快速升级,我们决定立即修补并披露较不严重的拒绝服务漏洞,同时联系矿工、企业和其他受影响的系统,并延迟发布完整的问题,以便为系统升级争取时间。9 月 20 日,一个公开论坛的帖子报告了完整的影响,尽管它很快被撤回,但该说法仍在进一步传播。
目前,我们认为超过一半的比特币哈希率已升级到已修补的节点。我们不知道有任何利用此漏洞的企图。
但是,受影响的用户仍然必须升级并应用最新的补丁,以确保不会发生大规模重组、无效区块的挖掘或无效交易的接受。
技术细节
在比特币核心 0.14 中,添加了一个优化(比特币核心 PR #9049),它避免了在初始预中继区块验证期间进行代价高昂的检查,以确保单个交易中的多个输入不会重复花费相同的输入,该检查是在 2012 年添加的(PR #443)。虽然 UTXO 更新逻辑拥有足够的知识来检查 0.14 中是否违反了此条件,但它仅在健全性检查断言中执行此操作,而不是使用完整的错误处理(但是,它在 0.8 之前确实完全处理了两次这种情况)。
因此,在比特币核心 0.14.X 中,任何尝试在区块内的单个交易中重复花费交易输出的行为都将导致断言失败并崩溃,正如最初报告的那样。
在比特币核心 0.15 中,作为简化未花费交易输出跟踪和修复资源耗尽攻击的大规模重新设计的的一部分,断言发生了细微的更改。它不再断言被标记为已花费的输出之前是未花费的,而是仅断言它存在。
因此,在比特币核心 0.15.X、0.16.0、0.16.1 和 0.16.2 中,任何尝试在区块内的单个交易中重复花费交易输出的行为(其中被花费的输出是在同一区块中创建的),都将发生相同的断言失败(如 0.16.3 补丁中包含的测试用例中存在的那样)。但是,如果被重复花费的输出是在之前的区块中创建的,则 CCoin 映射中仍将保留一个条目,并设置 DIRTY 标志,并被标记为已花费,从而不会出现此类断言。这可能允许矿工膨胀比特币的供应量,因为他们随后能够两次声明被花费的价值。
时间线
2018 年 9 月 17 日时间线:(所有时间均为 UTC)
- 14:57 匿名报告者向以下人员报告崩溃错误:比特币核心的 Pieter Wuille、Greg Maxwell、Wladimir Van Der Laan,比特币 ABC 的 deadalnix 以及比特币 Unlimited 的 sickpig。
- 15:15 Greg Maxwell 与 Cory Fields、Suhas Daftuar、Alex Morcos 和 Matt Corallo 共享原始报告。
- 17:47 Matt Corallo 识别出通货膨胀漏洞。
- 19:15 Matt Corallo 首次尝试联系 slushpool 首席执行官,以便建立沟通渠道,以便快速应用补丁。
- 19:29 Greg Maxwell 为演示通货膨胀漏洞的测试用例的哈希值设置时间戳 (a47344b7dceddff6c6cc1c7e97f1588d99e6dba706011b6ccc2e615b88fe4350)。
- 20:15 John Newbery 和 James O’Beirne 被告知该漏洞,以便他们能够协助提醒公司注意针对拒绝服务漏洞的即将发布的补丁。
- 20:30 Matt Corallo 与 slushpool 首席技术官和首席执行官交谈,并与拒绝服务披露一起共享补丁。
- 20:48 slushpool 确认已升级。
- 21:08 已向比特币 ABC 发送警报,通知他们补丁将于 22:00 公开发布。
- 21:30(大约)回复原始报告者,确认收到。
- 21:57 发布了带有补丁和演示拒绝服务错误的测试的比特币核心 PR 14247。
- 21:58 比特币 ABC 发布了他们的补丁。
- 22:07 向 Optech 成员等发送包含比特币核心 PR 和补丁链接的咨询电子邮件。
- 23:21 比特币核心版本 0.17.0rc4 标记。
2018 年 9 月 18 日
- 00:24 比特币核心版本 0.16.3 标记。
- 20:44 比特币核心发布版本和发布公告可用。
- 21:47 Bitcointalk 和 reddit 发布公开横幅,敦促人们升级。
2018 年 9 月 19 日
- 14:06 邮件列表分发了一条由 Pieter Wuille 发送的额外消息,敦促人们升级。
2018 年 9 月 20 日
- 19:50 David Jaenson 独立发现了该漏洞,并将其报告给比特币核心安全联系人电子邮件。