SP1漏洞暴露Succinct自身Prover Network问题

- 一起高危的 SP1 健全性漏洞导致 Succinct 自己的主网证明网络容易受到无效证明的攻击。
- 该缺陷存在于 SP1 原生 Rust 验证器中,涉及 6.0.0 至 6.8.0 版本。
- Succinct 已将 6.8.1 版本的修复程序部署到其主网证明网络。
Succinct 零知识证明系统 SP1 中的一起高危健全性漏洞,使其主网证明网络暴露于无效证明的风险之下。
根据 10 月 11 日发布的 GitHub 安全公告,该网络是 Succinct 所知受影响的唯一部署实例。
6.0.0 至 6.8.0 版本的原生 Rust 验证器可能接受无效证明
编号为 GHSA-p7v2-jjv3-8p8f 的安全公告指出,恶意证明者可以提交针对无效执行的证明,而网络的验证器会予以接受。Prover Network 接受了来自第三方证明者的证明。
要利用此漏洞,证明必须直接发送到 SP1 的原生 Rust 验证器。Core 和 Compressed 类型的证明在该路径上暴露了出来。
Groth16 和 Plonk 检查是安全的,因为它们使用的是具有固定形状的包装证明,从未触及该漏洞所涉及的由证明者控制的张量格式。
用于链上 Plonk 和 Groth16 检查的 Solidity 检查器也未受影响。使用 verify_sp1_proof 函数来检查 Compressed 证明的应用程序仅在证明聚合最终生成 Groth16 或 Plonk 证明时才是安全的。
安全公告指出,从版本 6.0.0 到 6.8.0,sp1_hypercube、sp1_prover 和 sp1_sdk 均受到影响。Succinct 于 9 月 24 日在 6.8.1 版本中发布了修复程序,比该安全公告公开时间早了 17 天。

存储长度不匹配的张量会被 6.8.1 版本丢弃。
SP1 的原生 Rust 验证器存在此漏洞。这是程序中用于检查证明是否有效的部分。
SP1 将多维数据存储在张量(Tensor)中。一个张量由存储值的缓冲区和描述其形状的声明维度组成。
两者必须一致才能进行有效的验证。存储的元素数量必须等于所给维度的乘积。
每条证明数据上都有一个标签,标明其大小。验证者从未检查标签上的内容是否与内部实际数据一致,它仅查看标签。
因此,攻击者可以发送带有伪造标签的数据。这样,检查的不同部分会查看同一数据的各个部分,从而导致伪造的证明可能通过验证。
在版本 6.8.1 中,反序列化过程现在增加了长度检查。任何存储元素数量不等于其声明维度乘积的张量都将被拒绝。
6.8.1 版本发布后,Succinct 已将修复程序部署到主网证明者网络(Prover Network)。
向网络请求证明的用户无需在其端进行任何更改。任何运行自己的原生 Rust 验证器并接受来自不受信任的证明者的证明的人,都需要升级到 6.8.1。
据该安全公告称,Vitalis Salis 发现了此漏洞,并通过 Immunefi 的漏洞赏金计划进行了报告。
Cryptopolitan 今年报告了其他证明系统健全性漏洞,包括 Zcash 的 Orchard 隐私池中的健全性漏洞。Cryptopolitan 还讨论了 Foom.Cash 上的一个利用案例,攻击者因验证器配置错误而伪造了 zkSNARK 证明。
如果您正在阅读这篇文章,说明您已经领先一步。请继续通过我们的通讯保持关注。
常见问题
SP1漏洞是什么?
SP1原生Rust验证器中存在一个健全性缺陷,使得恶意证明者能够为无效执行生成被接受的证明。
哪些SP1版本受影响,哪个版本修复了该问题?
6.0.0至6.8.0版本受影响,6.8.1版本已修复此问题。
SP1用户需要采取任何行动吗?
Succinct主网Prover Network的请求者无需进行任何更改。运行独立原生Rust验证器且从不受信任的证明者获取证明的团队应升级至6.8.1版本。
免责声明。 所提供的信息不构成交易建议。Cryptopolitan.com 对基于本页信息进行的任何投资不承担任何责任。我们强烈建议在做出任何投资决策之前进行独立研究或咨询合格的专业人士。

Randa Moses
Randa Moses 是 Cryptopolitan 的编辑兼记者,专注于科技、人工智能、机器人技术、加密货币、诈骗及黑客攻击等领域的报道。自 2017 年以来,她一直活跃于加密货币领域,曾担任 Forward Protocol、AmaZix 和 Cryptosomniac 等公司的职务。Randa 拥有布拉德福德大学电气工程与电子工程学位。
















