SecRepoBench: Benchmarking Code Agents for Secure Code Completion in Real-World Repositories
本文提出了名为 SecRepoBench 的基准测试,通过评估 29 个独立大语言模型和 15 个代码代理在 27 个真实 C/C++ 仓库中的表现,发现代码代理在生成正确且安全的代码补全方面显著优于独立模型,并揭示了当前技术在处理现实世界安全编码任务时仍面临的挑战。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
这篇论文介绍了一个名为 SecRepoBench 的新工具,它的核心任务是给 AI 程序员“出考题”,看看它们在写代码时,能不能既把功能做对,又不出安全漏洞。
为了让你更容易理解,我们可以把这篇论文的内容想象成一场**“超级厨师大比拼”**。
1. 背景:为什么需要这场考试?
现在的 AI(大语言模型)就像一个个天才厨师,很多开发者让它们帮忙写菜(代码)。
- 以前的考试(旧基准): 就像让厨师在一张白纸上凭空做一道菜。只要菜能端上来,味道还行,就算及格。
- 现实的问题: 在真实的餐厅(真实软件仓库)里,厨师不是凭空做菜,而是要在别人已经做好的复杂厨房里,往现有的大锅里加一勺调料。这时候,如果加错了,不仅菜味道不对(功能错误),还可能让整锅菜有毒(安全漏洞,比如被黑客利用)。
- 以前的局限: 以前的考试要么只考“菜能不能吃”(功能正确性),要么只考“有没有毒”(安全性),很少同时考这两点,而且往往是在“白纸”上考,没考过在“复杂厨房”里的表现。
2. SecRepoBench 是什么?(新的考场)
SecRepoBench 就是一个高难度的“实战模拟考场”。
- 考场环境: 它不是白纸,而是从 GitHub 上找来的 27 个真实的、复杂的 C/C++ 代码库(就像 27 个真实的米其林餐厅厨房)。
- 考题内容: 有 318 道题。每道题都是让 AI 在现有的代码里,填补一个空缺的函数。
- 出题人: 这些空缺的地方,原本都是真实发生过安全漏洞的地方(比如缓冲区溢出、内存泄漏等 15 种常见漏洞类型)。
- 评分标准(双重考核):
- 功能测试(能不能吃): 用开发者写的“单元测试”来跑。如果菜做出来味道不对,或者程序跑不起来,直接挂科。
- 安全测试(有没有毒): 用黑客专用的“攻击脚本”(OSS-Fuzz 提供的测试用例)去攻击。如果 AI 写的代码一被攻击就崩溃(像菜里有毒让人中毒),也算挂科。
- 只有既好吃又无毒,才算满分。
3. 考试结果:AI 表现如何?
论文测试了 29 个单独的 AI 模型(就像让厨师单打独斗)和 15 个"AI 助手团队”(代码智能体,它们能像人一样在厨房里到处翻找资料、查阅文档)。
- 单打独斗的 AI(Stand-alone LLMs): 表现很惨。
- 即使是目前最强的 AI(GPT-5),在 100 道题里,也只有 39.3% 能同时做到“功能正确且安全”。
- 这说明让 AI 在复杂的真实环境里写代码,它们很容易“翻车”。
- 组队 AI(Code Agents): 表现好很多!
- 当 AI 配备了“助手框架”(比如 OpenHands, Aider 等),它们能主动去查阅整个代码库的上下文,就像厨师会去翻食谱、问老员工一样。
- 最好的组合(OpenHands + OpenAI o3)把通过率提升到了 53.5%。
- 关键发现: 这种提升主要来自于把菜做对了(功能正确性),而不是把毒去掉了(安全性)。也就是说,AI 助手更擅长把代码逻辑理顺,但在防止安全漏洞方面,进步相对较小。
4. 为什么这个考试这么难?
论文对比了以前的考试(BaxBench),发现 SecRepoBench 难得多:
- 以前: 像是在“样板间”里装修,只要把墙刷白就行。
- 现在: 像是在“老式公寓”里装修,你要知道哪根梁是承重墙,哪根水管是旧的,不能乱动。
- 结果: 即使是最好的 AI,在 SecRepoBench 上的得分也远低于在旧考试上的得分。这说明真实的代码环境比模拟环境要复杂得多。
5. AI 主要在哪里“翻车”?
通过分析,发现 AI 助手主要犯了两种错:
- 瞎编乱造(幻觉): 为了把代码写通,AI 会编造一些不存在的函数名或变量名。就像厨师为了凑菜,凭空发明了一种不存在的调料,结果导致厨房(编译器)报错,菜做不出来。
- 顾此失彼: AI 很努力地把功能实现了,但忘了加“安全锁”。比如,它知道要切菜,但忘了检查刀是不是钝的,或者切的时候会不会切到手。它优先保证“菜能做出来”,却忽略了“别切到手”。
6. 总结与启示
这篇论文告诉我们:
- AI 写代码还有很长的路要走: 在真实的、复杂的软件项目中,AI 目前还很难同时保证“功能完美”和“绝对安全”。
- 智能体(Agent)是方向: 让 AI 学会像人类工程师一样,去查阅资料、理解上下文,比单纯让它“猜”代码要有效得多。
- 安全是短板: 虽然 AI 能写出能跑的代码,但防止黑客攻击的能力依然薄弱。未来的研究需要重点解决如何让 AI 在写代码时,把“安全”看得和“功能”一样重。
一句话总结:
SecRepoBench 就像给 AI 程序员安排了一场在真实复杂厨房里的“盲测”,发现它们虽然比单打独斗时强了,但离“既好吃又无毒”的顶级大厨,还差得远,特别是在防止“下毒”(安全漏洞)方面,还需要更多的训练和工具辅助。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。