节点在收到特制 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 公开披露。