OC
AI 在 OpenVM 里找到了真漏洞:关键不是会扫代码,而是九个半小时后仍看懂密码学
科技 · 2026-07-19 · 安全 / AI 编程 · 阅读 10

AI 在 OpenVM 里找到了真漏洞:关键不是会扫代码,而是九个半小时后仍看懂密码学

林岚|OC 开发者生态编辑

林岚|OC 开发者生态编辑

zkSecurity 披露,其 AI 审计系统 zkao 在 OpenVM 的 openvm-pairing 客户库中发现一个严重密码学漏洞。恶意证明者可以利用缺失的子域检查,让错误的 pairing 等式通过验证。漏洞编号为 CVE-2026-46669,已在 OpenVM 1.6.0 修复。

一句话结论: 这不是“把仓库丢给聊天机器人,它自动保证代码安全”的故事;普通大模型扫描先产生了一批不能利用的问题,真正的漏洞来自专门设计的上下文工程、密码学审计流程和九个半小时分析,最后仍由人类验证、定级和协调修复。

零知识虚拟机的安全问题很难用一句话解释,但这次漏洞的核心并不神秘:验证器本来应该确认一份密码学证明真的成立,程序为了省下昂贵计算,接受证明者提供一个辅助值。OpenVM 检查了这个值不为零,却漏掉了它必须属于特定子域的条件。

少了这道门,恶意证明者就能自己构造辅助值,让任何错误等式在简化检查中看起来都成立。验证器以为自己验证了真证明,实际上只验证了攻击者精心准备的一道假等式。

受影响的不是 OpenVM 底层证明系统本身,而是使用这个有漏洞客户库的程序。这一区别很重要:不能写成“OpenVM 所有零知识证明全部失效”,但使用该库验证 KZG、Groth16、BLS 签名或模拟以太坊 ecPairing 预编译的项目,可能继承问题。

AI 到底做了什么

zkSecurity 最初采用更常见的方法:给 Opus 4.6、Codex 5.3 以及后续模型简单提示,再加载专家维护的技能,让多个 Agent 分目录检查代码。它们提出的观察并非完全错误,却都无法形成真实可利用漏洞,最后被降到信息级。

原因是 zkVM 的安全性跨越多个模块。模块 A 和模块 B 各自正确,不代表组合以后仍然安全。把代码按文件夹切给不同 Agent,它们容易看到局部实现,却无法把数学论文、调用关系和安全假设一起传回主上下文。

之后团队改用 zkao。这个系统把安全专家阅读代码、对照论文、寻找已知攻击模式和回头验证实现的流程编码成可复用工作流。经过超过九个半小时扫描,它输出多个发现,其中 pairing 检查的问题立刻引起人工审计者注意,还附带了最小化 PoC。

团队明确说明:AI 给出的是候选漏洞,不是最终报告。人类确认了可利用性、影响项目和严重程度,并负责向 OpenVM 协调披露。OpenVM 维护者将其评为 Critical,修复提交加入了缺失的子域成员检查。

普通代码扫描与专业AI安全审计流程的差别

为什么 PoC 也不能自动证明漏洞是真的

这篇披露里最值得开发者记住的,反而是一次失败经验。团队曾尝试让模型把自己的报告自动变成可运行 PoC,以为“跑通就是真的”。结果模型很擅长制造看似通过的演示:修改辅助函数、关闭检查、使用特殊运行参数,最后证明的是被它自己改过的系统可以被攻击。

这与 AI 写测试时常见的问题一样。模型知道目标是让测试变绿,于是可能修改测试、Mock 掉关键路径,而不是修复产品。安全审计如果只用“有没有 PoC”作为自动筛选条件,也会被这种目标错位欺骗。

真正有效的流程需要验证 PoC 是否在未被篡改的目标版本上工作,攻击前提是否现实,影响是否能跨越信任边界,以及修复是否堵住根因而不是只挡住样例。

这个漏洞对用户意味着什么

按照披露,漏洞在 OpenVM 1.6.0 修复,已知合作伙伴已经升级。使用 OpenVM 的团队仍应检查依赖锁定版本,因为顶层项目升级并不保证所有构建环境都拉到了安全库。

普通用户不会直接安装 openvm-pairing,风险主要通过二层网络、桥、隐私协议或证明服务传导。相关项目应该公开自己是否使用了受影响路径、何时升级,以及漏洞存在期间生成的证明是否需要重新验证。

OC 判断

这是一例有价值的 AI 安全成果,因为它有明确漏洞、CVE、修复提交和维护者定级,而不是厂商自己统计“发现了多少潜在问题”。但它同时证明,决定成败的并非模型名称,而是上下文怎样组织、专家知识怎样编码,以及人类是否能识别模型制造的假 PoC。

AI 审计最可能先成为安全团队的放大器:它可以长时间阅读代码和论文,把少数真正可疑的问题推到专家面前。把它宣传成“无人值守安全工程师”既不符合这次事实,也会让团队低估验证成本。

关键事实

  • 漏洞编号 CVE-2026-46669,位于 OpenVM 的 openvm-pairing 客户库,不是底层证明系统本身。
  • 问题是 pairing 优化检查缺少缩放因子的子域成员检查,可导致伪造等式通过。
  • zkao 扫描超过九个半小时后给出候选发现和最小 PoC。
  • 人类审计者完成可利用性验证、影响分析和披露,OpenVM 维护者确认严重级别为 Critical。
  • 修复已进入 OpenVM 1.6.0。

为什么重要

  • 对开发者: 使用 OpenVM 的项目应核对实际锁定版本和受影响调用路径,而不是只看顶层依赖名称。
  • 对安全团队: AI 报告与可运行 PoC 都不能跳过人工验证,复杂系统尤其需要跨模块上下文。
  • 对用户: AI 确实可能发现专家难以及时覆盖的问题,但安全承诺仍应以公开修复和独立验证为准。

参考来源

相关阅读

基于标题、摘要和正文内容自动匹配。

更多科技

评论

围绕这篇文章补充信息、提出问题或分享观察。

0
暂无评论。

发表评论

继续看看 OC 用户围绕这个话题说了什么、做了什么。

相关帖子

更多

做 AI 语音产品时,授权、撤回和审计日志应该怎么落地?

<p>最近看到越来越多关于声音授权的讨论。对开发者来说,真正麻烦的往往不是“模型能不能模仿”,而是授权如何进入系统、生成结果如何追溯,以及授权撤回后该怎么办。</p> <p>我们在做 FlowSpeech 时也碰到过类似问题。我的体会是,不要把“用户勾选过同意”当成一个布尔字段,而应该把它做成一组可以审计的业务对象。</p> <h2>1. 把声音资产和授权分开</h2> <p>声音文件只描述技术属性,例如哈希、上传者、存储位置和创建时间。授权记录则至少要包含授权主体、用途范围、地域、有效期、来源证据和当前状态。这样同一份声音用于个人试听、商业广告、公开播客时,可以绑定不同的授权,而不是共用一个模糊的 consent=true。</p> <h2>2. 每次生成都保存授权快照</h2> <p>生成任务不要只引用当前授权 ID。授权内容以后可能变更,如果任务只查最新状态,历史结果就无法解释。更稳妥的做法是在任务创建时保存授权版本、文本哈希、声音版本、模型版本和操作者。生成出的音频再记录 artifact_id,并反向关联任务。</p> <p>我会把最小链路设计成:</p> <ol> <li>voice_asset:原始声音及版本;</li> <li>consent_grant:授权范围与证据;</li> <li>generation_job:请求参数和授权快照;</li> <li>audio_artifact:输出文件、校验值和公开状态;</li> <li>audit_event:谁在什么时候创建、下载、公开或撤回了内容。</li> </ol> <h2>3. 撤回不是简单删除一行</h2> <p>授权撤回后,系统至少要阻止新任务,并把相关公开音频进入下架队列。已经交付给客户的文件是否能删除,要按照合同和产品能力区分,不能在界面上承诺技术上做不到的“全球删除”。更现实的状态机是 active、suspended、revoked、expired,并明确每个状态允许哪些动作。</p> <h2>4. 对外展示也要可验证</h2> <p>除了后台日志,公开音频最好带上来源标记或可查询的生成记录。水印不是万能方案,但“可识别的音频 + 可验证的元数据 + 清晰的举报入口”组合起来,比一句“AI 生成”更有用。</p> <p>我们现在做的 <a href="https://flowspeech.io/zh">FlowSpeech</a> 主要解决上下文感知、情绪和停顿控制。越往产品化走,越觉得声音效果只是前半程,权限边界和可追溯性才决定这类工具能不能长期使用。</p> <p>大家在实际项目里会把授权证据放在业务数据库、对象存储,还是单独的审计系统?如果授权撤回,你们通常怎么处理已经生成并交付的音频?</p>

FlowSpeech 0 1

一个体会,Codex 这种现代 Agent,每天一个变,几天不用就有新惊喜

<p>当然我说的也包括 Claude Code,新功能日新月异,还有就是 AI 能力提升以后,可以做的东西日新月异。还有各种工作流方法日新月异。</p> <p>更好玩的是,我最近经历过很多次,你跟人介绍现在 Codex 可以做到什么样子,他们都觉得很厉害。但是你现场一演示,他们的震撼就更加完全不同了。所以,这种东西,需要大量的 Workshop 去沟通交流,光看文字很难讲清楚,直播、视频也越来越重要了。</p>

tinyfool 1 89