漏洞总结 1. 漏洞概述 在 中,当新块连接到当前链的顶端时,系统未验证 Sprout 零知识证明。虽然 正确验证了这些证明,但这导致了验证不一致。 具体原因是 在共识验证路径中被调用了两次(分别在 和 中)。为了避免重复验证,在第一次调用时禁用了 Sprout 验证。然而, 标志位(继承自 Bitcoin Core)被用作验证状态的缓存。当该标志被设置时,所有逻辑(包括 Sprout 验证)都被跳过。这导致连接到链顶端的块从未被检查 Sprout 证明,验证器错误地将禁用的验证状态视为权威状态。 2. 影响范围 利用难度: 漏洞未被利用。因为 没有此 bug,如果攻击者提交包含无效 Sprout 证明的块, 节点会拒绝该块并导致分叉。 影响对象: 漏洞仅影响通过新块观察到的交易(因为提交到内存池的交易已经验证了证明)。 重组风险: 如果发生重组,带有无效 Sprout 证明的块会被断开连接,随后在重新连接时会被 验证并拒绝。 3. 修复方案 修改 中的逻辑,确保只有在所有验证步骤(包括 Sprout 验证)都启用并执行后,才设置 标志。 4. 关键代码修改 (POC/Fix) 文件: 文件: 文件: **