来源笔记
MemRepair: Hierarchical Memory for Agentic Repository-Level Vulnerability Repair
Automated Vulnerability RepairCode AgentsRepository Level RepairMemory Augmented AgentsSoftware Engineering AI
摘要
MemRepair 是一个面向仓库级漏洞修复的智能代理系统,为基于 LLM 的代码代理加入了持久化修复记忆。它声称在 SEC-Bench、PatchEval 和 Multi-SWE-bench C++ 上取得了更高的修复率,同时每个任务的成本接近通用编码代理。
问题
- 仓库级漏洞修复通常需要跨文件推理、运行时验证,以及不破坏现有行为的修复。
- 现有 LLM 代理往往只根据当前可见上下文生成补丁,因此会重复失败的修复,也会错过项目特有的修复规范。
- 这很重要,因为人工漏洞修复速度慢、成本高,而错误的自动补丁可能删除代码、掩盖崩溃,或者引入回归。
方法
- MemRepair 使用三层记忆:History-Fix Memory 记录来自同一项目或相似项目的历史修复,Security-Pattern Memory 记录可复用的防护模式,Refinement-Trajectory Memory 记录从失败补丁到成功补丁的修正路径。
- 检索时先优先查找同一项目、同一 CWE 和同一语言;如果找到的示例太少,就转而搜索其他具有相同 CWE 和语言的项目。
- 修复循环包含 Locator、Patcher 和 Verifier。Verifier 运行漏洞测试和回归测试,然后要么接受补丁,要么要求生成新补丁,要么要求 Locator 找到更好的代码位置。
- Iter_grep 解析仓库结构,并结合堆栈跟踪、sanitizer 报告、符号使用情况和到崩溃点的距离,对可能的代码位置排序。
- 失败尝试会被压缩成紧凑日志,成功的修复过程会更新后续任务使用的记忆。
结果
- 在 SEC-Bench 上,使用 DeepSeek-v3.2 的 MemRepair 解决了 58.00% 的任务;OpenHands* with DeepSeek-v3.2 为 38.50%,OpenHands with Claude-3.7 为 34.00%,SWE-agent with Claude-3.7 为 31.50%,Aider with Claude-3.7 为 23.50%。
- 在 SEC-Bench 上,MemRepair 每个任务的成本为 $0.26;OpenHands* 为 $0.18,OpenHands Claude-3.7 为 $0.61,SWE-agent 为 $1.29,Aider 为 $0.44。
- 在 SEC-Bench 上,MemRepair 的定位正确率达到 60.00%。SWE-agent 的定位更高,为 67.50%,但修复成功率更低,为 31.50%。
- 在涵盖 Python、Go 和 JavaScript 的 PatchEval 上,MemRepair 解决了 58.2% 的任务。摘录称这比之前最好的代理高出 20 多个百分点,但没有给出完整的各基线对照表。
- 在 Multi-SWE-bench C++ 上,使用 DeepSeek-v3.2 的 MemRepair 解决了 30.58% 的任务;InfCode-C++ with GPT-5 为 25.60%,MOpenHands with Claude-3.7 为 14.70%,MSWE-agent with Claude-3.7 为 11.60%,MAgentless with Claude-3.7 为 3.90%。
- 在 Multi-SWE-bench C++ 上使用相同的 DeepSeek-v3 后端时,MemRepair 解决了 15.08% 的任务;InfCode-C++ 为 13.20%。