比特币核心软件(Bitcoin Core)中的一个高严重性漏洞被披露,该漏洞被追踪为CVE-2024-35202,CVSS v3.0基础分值为7.5。利用该漏洞,远程攻击者可以让运行 v25.0 之前版本的 Bitcoin Core 节点崩溃。
当Bitcoin Core试图重建通过cmpctblock消息接收到的区块时,就会出现这个问题。当比特币节点收到区块公告时,它们会尝试使用存储在其内存池中的交易以及其他可用交易重建公告区块。如果重建因数据缺失而失败,节点会发送 getblocktxn 消息,向公布区块的节点请求缺失的交易。作为回报,节点会在 blocktxn 消息中发送所请求的交易。
Bitcoin Core 的紧凑型区块协议使用缩短的交易标识符(short-ids)来减少带宽使用。这些短标识符的大小只有 6 个字节,这增加了不同交易共享相同短标识符时发生碰撞的可能性。如果发生这种碰撞,Bitcoin Core 会使用后备机制,请求完整区块来解决问题。
然而,正如披露中解释的那样,”每当收到一个新的紧凑型区块时,Bitcoin Core 都会创建一个 PartiallyDownloadedBlock 的实例。当收到同一区块的第二个 blocktxn 消息时,就会触发两次 FillBlock 函数,这违反了代码中该函数只被调用一次的核心假设。这会导致节点崩溃。
攻击者利用 CVE-2024-35202 不需要运气。他们可以故意在 blocktxn 消息中包含与区块的 merkle root 不匹配的交易,从而导致节点崩溃。根据披露的信息,“攻击者不需要通过触发碰撞来获得好运,因为只需在 blocktxn 消息中包含未在区块的 merkle 根中提交的事务,就能轻松触发碰撞处理逻辑”。
这一漏洞凸显出,即使是像比特币核心这样成熟完善的系统,也可能受到交易处理协议漏洞的影响。成功利用这一漏洞可能导致对比特币核心节点的拒绝服务攻击,破坏网络的稳定性和功能性。
远程使节点崩溃的能力对比特币的去中心化网络构成了严重威胁。虽然这种崩溃不会使攻击者泄露资金或窃取数据,但会造成严重的破坏,尤其是在大规模利用的情况下。受此次崩溃影响的节点需要重新启动,可能会导致交易处理出现暂时中断。
Bitcoin Core v25.0已经解决了这个问题,我们强烈建议用户将其节点更新到这个版本。该漏洞由 Niklas Gögge 发现并修复,他还提交了一个补丁来解决该问题。