中文内容
介绍 CodeMender:一款用于代码安全的 AI 智能体
Raluca Ada Popa 与 Four Flynn
今天,我们将分享关于 CodeMender 研究的早期成果,这是一款新型 AI 驱动的智能体,可自动提升代码安全性。
众所周知,软件漏洞对开发者而言极难发现且修复耗时,即使借助模糊测试等传统自动化方法也是如此。我们基于 AI 的项目(如 Big Sleep 和 OSS-Fuzz)已经证明了 AI 在成熟测试软件中发现新零日漏洞的能力。随着我们在 AI 驱动的漏洞发现领域取得更多突破,仅靠人类将越来越难以跟上其步伐。
CodeMender 通过采用全面的代码安全方法帮助解决这一问题:它兼具响应式与主动性,既能即时修补新发现的漏洞,又能主动重写并加固现有代码,从而在此过程中消除整类漏洞。在过去六个月开发 CodeMender 的过程中,我们已向开源项目上游提交了 72 项安全修复,其中部分项目的代码规模高达 450 万行。
通过自动创建和应用高质量的安全补丁,CodeMender 的 AI 智能体帮助开发者与维护者专注于他们最擅长的工作——打造优秀的软件。
CodeMender 实战演示
CodeMender 通过利用近期 Gemini Deep Think 模型的思考能力,构建了一个能够调试和修复复杂漏洞的自主智能体。
为此,CodeMender 智能体配备了强大的工具,使其能够在修改代码前进行逻辑推演,并自动验证修改结果,以确保其正确性且不会引发回归问题。


尽管大语言模型正在飞速发展,但代码安全方面的错误可能带来高昂的代价。CodeMender 的自动验证流程从多个维度确保代码修改的正确性,它仅将高质量的补丁呈现供人工审核,例如这些补丁能够修复问题的根本原因、功能正确、不会引发回归,且遵循代码规范。
作为我们研究的一部分,我们还开发了新的技术和工具,使 CodeMender 能够更有效地推理代码并验证更改。这包括:
- 高级程序分析:我们开发了基于高级程序分析的工具,包括静态分析、动态分析、差分测试、模糊测试和 SMT 求解器。利用这些工具系统性地审查代码模式、控制流和数据流,CodeMender 能够更准确地识别安全漏洞与架构缺陷的根本原因。
- 多智能体系统:我们开发了专用智能体,使 CodeMender 能够针对底层问题的特定方面进行处理。例如,CodeMender 采用基于大语言模型的审查工具,高亮显示原始代码与修改后代码的差异,以验证拟进行的更改不会引入回归,并在必要时进行自我修正。
修复漏洞
为了有效修补漏洞并防止其复发,Code Mender 使用调试器、源代码浏览器及其他工具来精确定位根本原因并制定补丁。我们在下方的视频轮播中添加了两个 CodeMender 修补漏洞的示例。
示例 #1:确定漏洞的根本原因
以下是在分析调试器输出和代码搜索工具的结果后,智能体针对 CodeMender 生成的补丁所进行的根本原因推理片段。
尽管本例中的最终补丁仅修改了几行代码,但漏洞的根本原因并不明显。在此案例中,崩溃报告显示存在堆缓冲区溢出,但实际问题出在别处——解析过程中可扩展标记语言(XML)元素的堆栈管理不当。
示例 #2:智能体能够生成非平凡的补丁
在此示例中,CodeMender 智能体成功提出了一个非平凡的补丁,用于处理复杂的对象生命周期问题。
该智能体不仅能够查明漏洞的根本原因,还能够修改项目中完全自定义的 C 代码生成系统。




主动重写现有代码以增强安全性
我们还设计了 CodeMender,以主动重写现有代码,使其采用更安全的数据结构和 API。
例如,我们部署了 CodeMender,将 -fbounds-safety 注解应用于广泛使用的图像压缩库 libwebp 的部分代码。应用该注解后,编译器会在代码中自动添加边界检查,从而防止攻击者利用缓冲区溢出或下溢漏洞执行任意代码。
数年前,威胁行为体曾利用 libwebp 中的一个堆缓冲区溢出漏洞( CVE-2023-4863 )实施零点击 iOS 漏洞攻击。若采用 -fbounds-safety 注解,该漏洞以及项目中已添加注解的绝大多数缓冲区溢出漏洞将永久丧失被利用的可能。
在下方视频轮播中,我们展示了智能体决策过程的示例,包括验证步骤。
示例 #1:智能体的推理步骤
在此示例中,要求 CodeMender 智能体解决以下针对 bit_depths 指针的 -fbounds-safety 错误:
示例 #2:智能体自动修复错误与测试失败
CodeMender 的另一项关键特性是,它能够自动修复由其自身添加的注释所引发的新错误及任何测试失败。以下为智能体从编译错误中恢复的示例。
示例 #3:Agent 验证更改
在此示例中,CodeMender Agent 修改了一个函数,随后使用配置用于验证功能等效性的 LLM judge 工具,以确认功能保持完好。当该工具检测到失败时,Agent 会根据 LLM judge 的反馈进行自我修正。






让软件对所有人都安全
尽管 CodeMender 的早期成果颇具前景,但我们仍持谨慎态度,将重点放在可靠性上。目前,CodeMender 生成的所有补丁在提交至上游之前,均需经过人工研究人员的审核。
借助 CodeMender,我们已开始向多个关键开源库提交补丁,其中许多已被接收并合并至上游。我们正逐步推进该流程以确保质量,并系统性地响应开源社区的反馈。
我们还将逐步向关键开源项目中感兴趣的维护者推送由 CodeMender 生成的补丁。通过在此过程中不断收集反馈并进行迭代,我们期望能将 CodeMender 打造为一款供所有软件开发人员使用的工具,以帮助他们维护代码库的安全。
我们将分享多项技术与研究成果,并计划在未来几个月内将其发表为技术论文与报告。借助 CodeMender,我们才刚刚开启探索 AI 提升大众软件安全的巨大潜力。
致谢
贡献者(按字母顺序排列):
Alex Rebert、Arman Hasanzadeh、Carlo Lemos、Charles Sutton、Dongge Liu、Gogul Balakrishnan、Hiep Chu、James Zern、Koushik Sen、Lihao Liang、Max Shavrick、Oliver Chang 以及 Petros Maniatis。
原文标题
Introducing CodeMender: an AI agent for code security