谷歌使用 Gemini 辅助重写的 giflib Rust 版本在 CVE-2026-26740 公开披露前已具备免疫能力

Smart AI Code2026-10-11阅读约 5 分钟

谷歌安全团队验证了一种消除传统内存漏洞的新途径:使用 Gemini 将 C 代码库翻译为内存安全的 Rust 等效代码。据 InfoQ 报道,目标是 giflib,这是一个大约 3,000 行的图像处理库,经常在没有沙箱隔离的情况下解码不受信任的用户输入。

该项目背后的工程师 Bastian Kersting 和 Max Hils 使用了一个基于自主反馈循环的三阶段自动化迁移流程:一次性 Gemini 提示将完整的 C 逻辑移植到 Rust 中,人类专家审查了外部函数接口(FFI)处不安全的原始指针语义,随后自动差分测试引擎将行为差异反馈给模型以进行迭代修补。

由此产生的库 giflib-rs 已开源,作为考虑自动化语言迁移的团队的参考实现。为了保持透明的即插即用特性,工程师保留了原始的导出符号和结构定义,以免下游调用者中断。

最有力的验证发生在测试阶段。一名外部安全研究员在上游 giflib 中发现了一处越界堆写入,该漏洞后来被编目为 CVE-2026-26740。谷歌表示,在公开披露之前,运行其编译后 Rust 替代版本的生产节点在结构上就已对该漏洞免疫——该团队将这一结果作为证据,表明架构性语言迁移可以预防整类漏洞。

内存损坏漏洞约占成熟 C 和 C++ 技术栈中严重安全漏洞的 70%,这也是该项目的背景。相应的验证工作非常繁重:验证流水线对超过 3,000 万个真实的 GIF 资产进行了解码回归,以确保逐位渲染一致性,同时自动差分模糊测试器并行运行了两个运行时环境,持续六天——共 2 亿次迭代——未观察到功能偏差。

该流水线还使用了对抗性 LLM 评估提示来分析两个存储库中的潜在行为差异。这一过程暴露了 LZW 解压器中一个未处理的边缘情况,并标记了原始 C 源代码早期内部补丁引入的内部遗留越界写入。

性能没有下降。全球图像解码集群的生产遥测数据显示,Rust 二进制文件在运行时与原始 C 二进制文件性能相当。由于内存安全保证被纳入了类型系统,工程师得以拆除以前用于隔离图像解码的旧操作系统沙箱。移除该进程隔离边界显著降低了 P99 尾部延迟。

作者强调,该方法并非万能灵药。只要上游发布新功能或架构变更,将上游 C 依赖分支到 Rust 存储库就会导致持续的维护分歧,并且 FFI 包装器仍需要人类专业知识来防止生命周期泄漏并保持线程安全不变量。

社区反应不一。在 r/rust 和 Hacker News 上的讨论赞扬了差分模糊测试框架的严谨性,但对一次性翻译方法进行了严格审查。许多评论者认为,对于更大的代码库,使用 c2rust 等确定性转译器,然后进行 AI 驱动的重构以生成安全、惯用的 Rust,比单次 LLM 翻译更可靠。

已确认: 谷歌使用 Gemini 制作了与 ABI 兼容的 giflib Rust 替代版本;该库以 giflib-rs 名称开源;验证涵盖了超过 3,000 万次 GIF 解码和 2 亿次差分模糊测试迭代;运行 Rust 版本的生产节点在披露前对 CVE-2026-26740 具有免疫能力;沙箱移除降低了 P99 尾部延迟。

未知: 一次性翻译方法能否扩展到像 giflib 这样小型、自包含的库之外,以及随着 C 库的发展,如何维持针对上游 giflib 的持续维护分支。

期待: 谷歌提供更多细节,说明如何跟踪和合并上游 giflib 的更改到 giflib-rs 中,以及该团队是否将相同的流水线应用于更大、更复杂的 C 依赖。

Sources: InfoQ (English), InfoQ (Chinese), daily.dev