InfoQ

Google Rewrites Critical C Dependencies to Rust Using AI and Differential Fuzzing

8.5内容质量
Google Rewrites Critical C Dependencies to Rust Using AI and Differential Fuzzing

TL;DR · AI 摘要

Google通过Gemini AI和差分模糊测试将关键C依赖库迁移至Rust,消除内存漏洞并实现ABI兼容。

核心要点

  • 使用Gemini单次提示完成C到Rust的完整逻辑迁移
  • 保留原始符号和结构定义实现ABI兼容性
  • 自动化测试发现并修复CVE-2026-26740零日漏洞

结构提纲

按章节快速跳转。

  1. Google为消除C库内存漏洞启动Rust迁移项目。

  2. 采用Gemini AI单次提示生成Rust代码并保留ABI兼容性。

  3. FFI包装器需处理原始指针语义并确保内存安全。

  4. 通过差分模糊测试发现行为差异并迭代修复。

  5. 消除未修补的堆写零日漏洞并提升系统安全性。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • C到Rust迁移实践
    • 方法论
      • Gemini AI单次提示
      • 差分模糊测试
    • 关键工具
      • FFI包装器
      • Rust内存安全
    • 成果
      • 消除CVE-2026-26740漏洞
      • ABI兼容性实现

金句 / Highlights

值得收藏与分享的关键句。

#Rust#C#AI#差分模糊测试#安全漏洞
打开原文

Google 使用 AI 和差分模糊测试将关键 C 依赖项重写为 Rust - InfoQ

InfoQ 首页 News Google 使用 AI 和差分模糊测试将关键 C 依赖项重写为 Rust

开发

InfoQ 认证 AI 辅助工程计划(在线,10 月 19 日):构建支撑框架。

Google 使用 AI 和差分模糊测试将关键 C 依赖项重写为 Rust

2026 年 9 月 27 日 3 分钟阅读

作者

  • Olimpiu Pop

#### 关注我们

YouTube

232K 粉丝

LinkedIn

26K 粉丝

Instagram

新

RSS

19K 读者

X

57.1k 粉丝

Facebook

21K 点赞

Bluesky

收听本文 -

0:00

音频准备就绪

您的浏览器不支持音频元素。

正常

1.25x

1.5x

喜欢

新下拉阅读列表

  • 阅读列表

Google 安全团队通过利用 Gemini 将 C 代码库转换为内存安全的 Rust 等效实现,验证了一种消除遗留基础设施中内存漏洞的新路径。该计划聚焦于 giflib,这是一个约 3000 行代码的图像处理库,通常在没有沙箱的情况下解码不受信任的用户输入。通过交付一个与 ABI 兼容的 Rust 编写的即插即用库,团队成功退役了进程隔离沙箱,保持了延迟中立性,并在该漏洞被公开记录为 CVE-2026-26740 之前消除了一个未修补的堆写零日漏洞。

内存损坏漏洞约占成熟 C 和 C++ 栈中严重安全漏洞的 70%。软件工程师 Bastian Kersting 和 Max Hils 没有采用多年手动转换或完全依赖运行时边界检查,而是执行了一个围绕自主反馈循环设计的三阶段自动化迁移过程。

首先,团队使用 Gemini 的单次提示将整个 C 库的逻辑一次性移植到 Rust。由于该库需要透明替换现有共享对象而不破坏下游调用者,工程师保留了原始导出符号和结构定义。在最初的迭代中,外函数接口建模引入了不安全的原始指针语义,需要人工专家检查并优化指针所有权和生命周期不变量。最后,自动化差分测试引擎检测到行为差异,并将失败追踪反馈给模型进行迭代补丁合成。

图片来源:基于博客文章内容使用 Gemini 生成。

为防止在跨 C 边界传递指针时出现未定义行为,FFI 包装器从原始指针重建安全的 Rust 句柄:

code
#[no_mangle]
pub unsafe extern "C" fn DGifCloseFile(
    gif_file: *mut GifFileType,
    error_code: *mut c_int,
) -> c_int {
    if gif_file.is_null() {
        return GIF_ERROR;
    }
    let mut handle = Box::from_raw(gif_file as *mut GifFilePrivate);
    match handle.close() {
        Ok(_) => GIF_OK,
        Err(e) => {
            if !error_code.is_null() {
                *error_code = e.to_raw();
            }
            GIF_ERROR
        }
    }
}

将自动生成的代码部署到关键基础设施时,需要与历史 C 实现建立语义等价性。团队建立了包含超过 3000 万个真实世界 GIF 资产的大规模回归解码验证流水线,确保逐位渲染一致性。

同时,自动化差异模糊测试工具连续六天并行执行两个运行时的迭代,累计完成20000万次迭代,未观察到功能漂移。测试套件还集成了针对两个仓库的对抗性大型语言模型评估提示,用于分析潜在的行为分叉。验证流水线发现LZW解压器中存在一个未处理的边界情况,并标记出原始C源码早期内部补丁引入的一个遗留越界写入问题。

在预发布阶段,该项目得到了最明确的验证。一位外部安全研究人员在上游giflib中发现了一个越界堆写漏洞,被记录为CVE-2026-26740。运行Google编译的Rust替代方案的生产节点在漏洞公开前就表现出对该缺陷的结构性免疫,证明了架构语言迁移本质上可以提前防范整个漏洞类别。

用Rust替换C库时,人们常担心强制边界检查带来的运行时开销。全球图像解码集群的生产遥测数据显示,Rust二进制文件在运行时性能与原始C二进制文件保持一致。此外,由于内存安全保证已直接纳入类型系统,平台工程师能够拆除之前用于隔离图像解码任务的遗留操作系统沙箱。移除该进程隔离边界后,第99百分位尾部延迟显著降低。

尽管有这些效率提升,作者强调人工智能翻译并非万能方案。将上游C依赖项分叉到Rust仓库后,每当上游仓库发布新功能或架构修改时,都会产生持续的维护分歧。此外,外部函数接口包装器仍需要人工领域专业知识来防止生命周期泄漏,并确保线程安全不变量保持完整。

在r/rust和Hacker News的讨论中,人们普遍认可这一成就,同时就AI辅助移植的实用性和安全性展开辩论:评论者赞扬了Google严谨的差异模糊测试框架(该框架发现了Google自身遗留C补丁中的现有越界写漏洞),但对一次性翻译方法进行了严格审查,强调人工审计细微语义回归和修复不安全C FFI边界所需的工作量往往远超代码生成本身,导致许多人认为,采用确定性转译器(如c2rust)后进行AI驱动的重构以生成安全且符合习惯的Rust代码,可能在库规模超出giflib这类简单自包含目标时更具可靠性。

Google已将最终库作为开源项目发布,命名为giflib-rs,作为评估基础工具自动化语言迁移的参考实现。

作者信息主容器

关于作者

章节标题

每个作者的主容器

#### Olimpiu Pop

显示更多

显示更少

#### 本内容属于大型语言模型主题

##### 相关主题:

  • 开发
  • AI Harness
  • 大型语言模型
  • Rust
  • 内存安全
  • 相关编辑
  • 相关赞助商
  • 赞助商 2026年10月8日,美国东部时间下午12点 当AI加速开发,您的CI流水线能跟上吗?由Datadog软件交付产品市场经理Eric Metaj和Datadog CI/CD优化产品经理Rohin Chandra呈现

InfoQ新闻通讯

每周二发送上周InfoQ内容精选。加入超过25万名高级开发者的社区。查看示例

我们保护您的隐私。 /think