当处理特制未确认交易的孤儿时,节点可能会被卡住几个小时。

此问题被认为是**高**严重性。

详情

在将交易接受到其内存池后,节点将遍历其孤儿交易缓存以查找新的接受交易是否可以接受任何交易。此搜索是二次的:对于新接受交易中的每个输出,它将遍历所有缓存的孤儿交易(限制为 100)。通过专门制作无效但验证成本高的孤儿交易,节点可能会被卡住几个小时。

Pieter Wuille 在 PR #15644 中修复了卡顿问题,方法是在找到匹配项(无论孤儿是否有效)时中断孤儿解析以处理新消息。

归属

感谢 sec.eine 负责任地披露了该漏洞,并提供了修复方面的反馈。

时间线

  • 2019-03-19 sec.eine 通过电子邮件向 Greg Maxwell 报告了该问题
  • 2019-03-21 Greg Maxwell 回复了有关提议补丁的信息
  • 2019-03-22 sec.eine 对补丁提供了反馈(“看起来很稳固,而且 [..] 不会引起注意”)
  • 2019-03-22 Pieter Wuille 开启 PR #15644
  • 2019-04-01 PR #15644 已合并
  • 2019-05-18 Bitcoin Core 版本 0.18.0 发布,并修复了该问题
  • 2020-07-22 这个问题在 PR 审查俱乐部期间 部分披露
  • 2020-08-01 最后一个易受攻击的 Bitcoin Core 版本 (0.17.x) 进入 EOL
  • 2024-07-03 公开披露。