首页 网络安全 正文
  • 本文约1453字,阅读需7分钟
  • 305
  • 0

Bitcoin Core高危拒绝服务漏洞CVE-2024-35202分析

摘要

安全人员 Niklas Gögge 发现并披露了Bitcoin Core中的一个安全漏洞,漏洞被追踪为CVE-2024-35202,该漏洞被认为是高严重性。

Bitcoin Core(比特币核心)是由全球各地的开发者组成的,作为一个非营利组织,主要是对比特币程序进行修改、更新、维护等。

Bitcoin Core通常有两个解释,一个是钱包,一个是开发团队,但无论钱包还是团队都被认为是官方正统,是比特币唯一开发团队。

一、基本情况

Bitcoin Core钱包由Bitcoin Core团队开发,作为一个全节点钱包,同样也是被认为是正统官方钱包,受到不少比特币爱好者的拥护。

安全人员 Niklas Gögge 发现并披露了Bitcoin Core中的一个安全漏洞,漏洞被追踪为CVE-2024-35202,该漏洞被认为是高严重性。

二、漏洞分析

CVE-2024-35202漏洞CVSS评分7.5,允许远程攻击者通过在 blocktxn 消息中块的 merkle 根中包含未提交的交易来导致拒绝服务。

该漏洞由Niklas Gögge 2022年10月05日向 Bitcoin Core 安全邮件列表报告;2023年01月24日时 包含修复程序的 PR #26898 合并。

2023年05月25日时,Bitcoin Core v25.0 版本发布并修复漏洞;直到2024年10月09日时该漏洞公开披露,追踪为CVE-2024-35202。

需要说明的是,CVE-2024-35202漏洞只能算新披露漏洞而非新漏洞,毕竟 Bitcoin Core 在2024年10月06日时已更新至 28.0 版本。

Bitcoin Core高危拒绝服务漏洞CVE-2024-35202分析

Bitcoin Core v25.0 之前版本允许远程攻击者通过将未提交到区块merkle根的交易包含在 blocktxn 消息中,即可触发冲突处理逻辑。

当通过cmpctblock消息接收到区块公告时,Bitcoin Core 会尝试使用其自己内存池中的交易以及其他可用交易来重建已公告的区块。

如果重建由于丢失交易而失败,它将通过getblocktxn消息向上级节点请求,作为响应,预计会出现应包含请求交易的blocktxn消息。

由于根据重建的交易集会计算出的 merkle 根与区块公告中的 merkle 根不匹配,因此节点会检测到 merkle 根不匹配而引发的冲突。

系统设定了对等节点不应因检测到冲突而受到惩罚,因为它们可能会虚假发生,因此通过回退到请求完整的区块对它们进行处理。

PartiallyDownloadedBlock 在每次受到新的紧凑区块时,Bitcoin Core都会创建一个实例,如果请求丢失交易,则实例将被持久化。

直到处理相应的 blocktxn 消息的时候,在收到blocktxn消息后, PartiallyDownloadedBlock::FillBlock被调用,尝试重建完整的区块。

在上述冲突情况发生的时候,系统请求完整的区块,但PartiallyDownloadedBlock 与底层块请求相关的实例以及其他状态保持不变。

这就为第二个 blocktxn 消息留下了空间,以便处理同一区块并FillBlock再次调用触发器,这样的情况就会违反只能调用一次的假设。

只能调用一次的假设被记录为 assert 语句,FillBlock 调用两次将引发 Bitcoin Core 节点崩溃,触发冲突处理逻辑导致拒绝服务错误。

攻击者不需要通过触发冲突来碰运气,只需将未提交到块的 merkle 根中的交易包含在 blocktxn 消息中即可轻松触发冲突处理逻辑。

毕竟对于一个 PartiallyDownloadedBlock 实例 FillBlock 可以调用两次,这样就会导致远程崩溃Bitcoin Core节点从而导致拒绝服务。

三、漏洞影响

Bitcoin Core < v25.0 

四、修复建议

该漏洞已在Bitcoin Core v25.0 版本中,目前 Bitcoin Core 早已更新至 v28.0版本了,因此这里只做分析解读。

评论
更换验证码
友情链接