🔴 【深度分析】严重安全漏洞:CVE-2026-54496

CVSS 评分: 严重(9.3)🔴  状态: Deferred  发布时间: 2026-07-17


🔍 技术细节速览

字段 值
CVE ID CVE-2026-54496
CVSS 评分 9.3 🔴
严重程度 严重
CVSS 向量 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:L
CWE 分类 CWE-345
发布时间 2026-07-17
最后更新 2026-07-17
状态 Deferred
数据来源 security-advisories@github.com

以下是根据您提供的 NVD 漏洞数据生成的深度安全分析文章。


⚠️ CVE-2026-54496:Zcash 零知识证明库中的完整性绕过漏洞(CVSS 9.3 严重)

CVSS 评分:9.3(严重)
CVSS 向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:L
危害等级: 严重(可导致资金安全威胁)


漏洞概述

CVE-2026-54496 是 Zcash 生态中多个核心组件(包括 zebrad、halo2_gadgets、orchard、zcash_primitives 和 zcashd)中存在的一个 零知识证明电路约束缺失 漏洞。由于在 halo2_gadgets 的变量基标量乘法(Variable-base scalar multiplication) gadget 中未能对基点(base point)施加正确的 复制约束(copy constraint),恶意证明者可以构造一个绕过 diversified-address-integrity 检查的有效证明。该检查本应确保 pk_d、g_d、ivk、nullifier 和 spend validating key (ak) 与正在花费的 note 一致。一旦被利用,攻击者可以在不满足正确地址绑定的情况下伪造花费证明,可能导致 资金被盗或双花。

该漏洞影响所有基于 Halo2 证明系统的 Zcash 组件,需立即修复。


受影响组件与版本

组件 受影响的版本范围 修复版本
zebrad(Zcash 节点 Rust 实现) < 5.0.0 5.0.0
halo2_gadgets(Halo2 证明系统电路库) < 0.5.0 0.5.0
orchard(Orchard 屏蔽池实现) < 0.14.0 0.14.0
zcash_primitives(Zcash 密码学原语) < 0.28.0 0.28.0
zcashd(Zcash 核心节点 C++ 实现) < 6.20.0 6.20.0

所有使用上述库的应用程序或网络参与者(包括全节点、轻钱包、矿池)均受影响。


漏洞原理分析

背景:Orchard 屏蔽池与零知识证明

Zcash 的 Orchard 协议使用 Halo2 证明系统实现隐私交易。在花费一个 note 时,证明者需要生成一个 Orchard Action 证明,该证明包含一系列约束,其中之一是 diversified-address-integrity 检查:它强制证明者正确地绑定 pk_d(支付密钥)、g_d(多样化基点)、ivk(传入查看密钥)、nullifier(花费标记)和 ak(证明授权密钥)到同一个 note。该约束是防止伪造花费的关键。

漏洞根因:缺失复制约束

在 halo2_gadgets/src/ecc/chip/mul/incomplete.rs 中,实现了变量基标量乘法(用于计算 [sk] * B,其中 B 是基点)。为了电路效率,该模块使用了 assign_advice() 来分配基点(base point)的坐标值。然而,该分配没有通过复制约束(copy constraint)与电路外部实际输入的基点进行绑定。也就是说,证明者可以在证明中提供一个完全不同的基点值,而电路无法检测到该值与 witness 中声明的基点不一致。

具体而言,在零知识证明电路中,assign_advice() 仅将 witness 值放入建议列(advice column),但并未确保这个值必须等于某个固定公开输入或之前约束过的值。缺少 assign_fixed() 或通过 copy() 建立的约束链,使得攻击者可以在证明时自由选择基点。当 diversified-address-integrity 检查依赖该基点(g_d)时,攻击者可以构造一个恶意证明,使用伪造的基点使得检查通过,但实际上 spending key 与 note 并不匹配。

攻击向量

  1. 攻击前提:攻击者需要能够构造并提交恶意交易到 Zcash 网络(无需认证,CVSS 中 PR:N, UI:N)。
  2. 利用方式:攻击者在生成 Orchard Action 证明时,修改电路中基点的建议列值,使其与 g_d 不一致,但同时调整其他 witness 值使得整个约束系统仍通过验证。
  3. 攻击复杂度:低(AC:L),因为漏洞本质上是缺少一个约束,无需复杂的密码学攻击。
  4. 影响范围:改变(S:C),攻击者可影响网络中其他用户的交易状态(例如双花他人的 note)。

影响评估

维度 评估
攻击向量(AV) 网络(N):攻击者可通过远程提交恶意交易利用
攻击复杂度(AC) 低(L):仅需修改电路 witness 值,无需哈希碰撞等计算
所需权限(PR) 无(N):任何网络参与者均可构造交易
用户交互(UI) 无(N):无需受害者操作
范围变更(S) 是(C):攻击可影响其他用户的资产安全
机密性影响(C) 无(N):不涉及信息泄露
完整性影响(I) 高(H):可伪造花费证明,破坏交易完整性
可用性影响(A) 低(L):可能间接导致网络拥堵或双花攻击,但非直接拒绝服务

实际威胁

  • 资金盗窃:攻击者可构造花费任何一个 note 的证明,即使该 note 并不属于自己,从而窃取 ZEC。
  • 双花攻击:在同一个 nullifier 下产生多个有效的证明。
  • 全网共识分裂:若攻击者发布大量恶意交易,可能造成节点处理异常,但 Zcash 网络已采用交易共识规则,修补前节点会拒绝无效证明,故主要风险在于证明验证逻辑本身。

修复建议

立即更新至修复版本

所有运行 Zcash 节点或依赖上述库的应用应立即升级:

  • zebrad: 升级至 5.0.0 或更高
  • halo2_gadgets: 升级至 0.5.0 或更高
  • orchard: 升级至 0.14.0 或更高
  • zcash_primitives: 升级至 0.28.0 或更高
  • zcashd: 升级至 6.20.0 或更高

临时缓解措施(若无法立即升级)

  • 对于全节点运营者:可暂停接受未经验证的交易,或仅接受来自受信任来源的交易(但此缓解难以实现,因为交易来自网络)。
  • 对于钱包开发者:在验证 Orchard Action 证明时,额外检查基点是否与 note 中的 g_d 一致(虽然这不是电路级约束,但可作为热修复)。
  • 对于矿工/提议者:避免打包任何不包含明确 g_d 匹配声明的交易(需结合钱包实现)。

长期建议

  • 在零知识电路设计中,对所有关键输入(特别是基点和公钥)必须使用复制约束或固定列(fixed column)以保证其值与公开预期一致。
  • 建议审计所有 Halo2 电路中 assign_advice() 的使用,确保没有遗漏复制约束。
  • 安全公告已标记为“Deferred”,可能意味着官方正在评估最佳修复方式,但根据提供的信息,修复版本已经发布,建议优先应用。

参考资料

  1. CVE 详情(NVD)
    https://nvd.nist.gov/vuln/detail/CVE-2026-54496

  2. 影响组件代码位置
    halo2_gadgets/src/ecc/chip/mul/incomplete.rs 中的 assign_advice() 使用

  3. CWE-345:数据真实性验证不足
    https://cwe.mitre.org/data/definitions/345.html

  4. 修复版本发布公告(假设存在于 GitHub Security Advisories)

    • zebrad 5.0.0 发布说明
    • halo2_gadgets 0.5.0 发布说明
    • orchard 0.14.0 发布说明
    • zcash_primitives 0.28.0 发布说明
    • zcashd 6.20.0 发布说明

注:由于 NVD 数据未提供具体公告链接,以上为典型参考位置。实际公告请查阅 Zcash 官方 GitHub 仓库的 Releases 页面。


结论:CVE-2026-54496 是一个由零知识证明电路设计缺陷引起的严重漏洞,可导致完整性绕过和资金损失。所有 Zcash 网络参与者应立即升级至修复版本,并在后续开发中强化电路约束的审计流程。