发现并修复Polygon zkEVM 中的严重漏洞

本文为机器翻译
展示原文

Polygon zkEVM 是一个第 2 层解决方案,旨在透过链下交易处理和零知识证明的使用来增强以太坊的可扩展性。该漏洞位于 zkProver 组件内,引入了一个重大的安全漏洞,使网路容易受到证明伪造攻击,这可能对区块链第 1 层和第 2 层资金的完整性和安全性构成重大威胁。

在发现漏洞后,Verichains 和Polygon团队合作开发了修复程序,然后在 2023 年 12 月在主网进行了审查和实施。

发现

这个漏洞是 Verichains 在零知识虚拟机器 (zkVM) 安全研究过程中发现的。在成功重现该错误后,攻击者能够产生伪造的证据并操纵网路内的状态变化,该发现很快就透过 Immunefi 错误赏金平台报告。 Immunefi 认知到问题的严重性,将问题上报给Polygon zkEVM 团队。团队讨论了该错误的性质,该错误被认为是至关重要的。由于该漏洞利用依赖来自 zkEVM 团队运营的集中式模组 Trusted Aggregator 的恶意,因此被利用的可能性较低。

背景

Polygon zkEVM 是一种称为零知识Rollup的第 2 层解决方案,旨在透过处理链下交易并使用零知识证明验证状态转换来增强以太坊的可扩展性。它将零知识证明与模拟以太坊虚拟机器(EVM)的虚拟机器整合在一起,确保与现有以太坊工具和智慧合约的兼容性。

漏洞

Polygon zkEVM 的核心功能锚定在 zkProver 模组中,负责用零知识证明验证交易。 zkProver 执行复杂的数学计算,透过产生正确性证明来验证交易,然后由底层 1 上的智能合约进行验证。这些证明对于确保交易有效性至关重要,同时提供更有效率、更便宜的执行环境。经过验证的证明会导致网路状态改变;因此,伪造证据的能力使可信任聚合器能够恶意改变网路状态,如果他们愿意的话,可能会导致资金损失或冻结整个网路的资产。

此漏洞源自于 zkProver 复杂的递归证明生成过程中的弱点,使攻击者能够操纵网路状态。我们透过在任何条件下都能发挥作用的关键证明伪造攻击证明了这一点。由于系统的零知识特性,产生伪造证明的方法仍然是隐藏的。

zkEVM 中的证明者采用eSTARK (STARK 的扩展版本)作为其主要后端协议。为了降低第 1 层证明验证的 Gas 成本,zkEVM 使用递归证明技术。在最后的递归步骤中,STARK 被转换为 SNARK,以实现恒定的证明大小和验证时间。然而,STARK 和 SNARK 运作的领域之间存在不相容性。 STARK 使用 F p^3中的元素(其中 p = 2 64 – 2 32 + 1)来促进高效率的算术运算。相较之下,SNARK 使用 F q中的元素,其中q与配对友好的椭圆曲线组联系在一起,在我们的例子中,q 的长度为 254 位元。这种不相容性会带来潜在的安全问题。

第一个弱点涉及 Merkle 根的计算(基于 FRI 的多项式承诺)。树的叶子是多个 F q元素的杂凑值。鉴于元素 (x, y, z) ∈ F p^3 (大约 192 位元熵)可以由 F q (约 254 位元熵)的元素唯一表示,因此在杂凑之前进行转换是有意义的F p^3的每个元素通过映射: (x, y, z) ↦ x + 2 64 y + 2 128 z 到 F q的元素以节省一些电路限制。然而,此过程并不能确保与 x、y、z 关联的值均限制为 64 位,从而可能允许它们成为 F q 中的任何元素。

第二个弱点来自算术门,该算术门对三个 F p^3元素a、bc 执行乘加运算,返回 F p^3的元素(a*b + c) 。考虑到a * b在进行模约减之前大约为 128 位元长,因此,第三个操作数c被分配了比所需更多的空间。

zkEVM 证明者后端的这些数学漏洞足以造成系统妥协。

影响和启示

该漏洞具有重大的潜在影响,使可信任聚合器能够为任何给定的计算制作有效的证明。这种漏洞可能会导致网路内未经授权的修改,最终导致第 2 层网路的资金损失,并可能影响第 1 层的存款。

我们团队的概念验证 (PoC) 证明了为以太坊主网zkEVM 的 Fork ID 4 迭代和测试网上的 Fork ID 5 迭代生成欺诈性证明的可行性。作为参考, Polygon zkEVM 的最新主网迭代是 Fork ID 8。

程序涉及:

  • 无效证明的产生:我们产生了两张伪造证明来验证以太坊主网区块高度18066976 和18026062 上的分叉ID 4 zkEVM,以及一张用于验证Goerli 测试网上区块高度9679280 上的分叉ID 5 zkEVM。

  • 执行过程:利用特定的脚本,我们透过精确的输入来编译和执行它们,以产生和验证伪造的证明。此程序将 zkEVM 的关键状态参数(StateRoot 和 LocalExitRoot)变更为预定值,从而修改网路的状态。

  • 观察:在执行之前,我们验证并记录了网路的状态根,这是合法的。执行后,状态根被改变,表示操纵成功。

这些证明有效地将 zkEVM 的 StateRoot 和 LocalExitRoot 取消为 0x0(或任何预定值),本质上擦除了网路的状态,包括余额和存款。

补救措施

Verichains 披露后, Polygon zkEVM 团队进行了详细的审查,以充分掌握漏洞的动态和影响。以下总结了对 pil-stark 所做的调整,并经 Verichains 团队验证:

  • GL 值约束:新增约束以确保 recursiveF 验证器电路的所有输入都低于 2^64。这些已合并到 StarkVerifier Bn128 模板中。

  • GL 操作:在 BN128 栏位中引入了用于加法和减法的新模板,名称为 GLSub(和 GLCSub)和 GLAdd(和GLCAdd)。此外,乘法和加法操作被隔离,消除了使用 GLCMulAdd 进行查询或评估验证。

  • GL操作标签: recursiveF验证器电路中新增了新标签,以便在BN128栏位的GL操作期间更精确地应用约束。标签 {maxNum} 表示最大可能讯号值,设定为 p – 1,其中 p = 0xFFFFFFFF00000001。

  • 测试:进行了调整以适应测试中的标签。设计了两个新测试来探测VerifyEvaluations 和VerifyQuery 中的边缘情况,确保正确套用标签。一项测试使用最大输入值 (p – 1) 挑战模板,而另一项测试则修改模板以维持标签值而不执行减法。

修复连结:

我们感谢Polygon zkEVM 团队对我们报告的漏洞做出及时有效的回应。此外,我们对错误赏金表示诚挚的感谢。此次合作显示了对网路安全社群的安全和专业精神的明确奉献。它证明了开放式沟通和建设性知识交流的价值,使开发人员和安全专业人员能够增强区块链生态系统的安全性。

关于我们

Verichains 是区块链安全解决方案的领先供应商,专注于密码分析、安全审计和应用安全解决方案。我们以调查和缓解一些最大的 Web3 骇客攻击(例如Ronin和BNB Chain Bridge)而闻名,我们将突破性的研究与实用的安全解决方案相结合,为区块链行业提供全面的保护。

Verichains 的世界级安全和密码学研究团队已成功识别出影响整个行业数十亿美元的关键漏洞,发现了主要供应商实施的多方计算 (MPC) 和零知识证明 (ZKP) 的核心缺陷。作为BNB Chain、 Polygon Labs、 WEMIX、 Aptos、 Klaytn、Bullish 和DWF Labs领先Web3 公司值得信赖的安全合作伙伴,Verichains 利用其在传统网路安全方面的深厚根基,为更安全、更可靠的Web3 生态系统提供尖端解决方案。

来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论