节点在收到特制 INV 消息后,可能会被迫分配大量内存。对于内存可用空间较小或连接数量较多的节点,这个问题尤其严重。

此问题被认为严重程度为**中等**。

详情

一个包含 50,000 个区块项目的 INV 消息可能会导致在单个 ProcessMessages() 调用中发送 50,000 个 getheaders 响应。每个响应包含一个定位器,大小约为 1 kB。所有响应都将一次性放入发送缓冲区。攻击者只需拒绝接收数据,即可阻止 50 MB 的缓冲区清空。

John Newbery 开启了 PR #18962 来修复此问题,该问题以每收到一个 INV 就发送一个 GETHEADERS 的方式来获得带宽提升作为借口。

归属

感谢 John Newbery 发现此漏洞、负责任地披露并修复它。

时间线

  • 2020-05-08 John Newbery 通过电子邮件报告了他的发现
  • 2020-05-12 John Newbery 开启 #18962
  • 2020-05-14 #18962 合并
  • 2020-06-03 比特币核心版本 0.20.0 发布,其中包含修复程序
  • 2021-09-13 最后一个易受攻击的比特币核心版本 (0.19.x) 结束生命周期
  • 2024-07-03 公开披露。