DaoyuanLi2816/RepoGuardBench

GitHub: DaoyuanLi2816/RepoGuardBench

该 benchmark 用于评估本地编码 agent 面对代码仓库内 prompt 注入攻击时的 bug 修复效用与鲁棒性,并对比多种轻量级防御策略的效果。

Stars: 8 | Forks: 0

# RepoGuardBench **衡量本地编码 agent 在代码仓库内容试图转移其注意力时,是否仍能继续修复 bug。** [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/DaoyuanLi2816/RepoGuardBench/actions/workflows/ci.yml) [![论文](https://img.shields.io/badge/paper-OpenReview-blue)](https://openreview.net/forum?id=58AGMTgU3L) [![海报](https://img.shields.io/badge/poster-PNG-6f42c1)](paper/poster.png) [![代码许可证](https://img.shields.io/badge/code-MIT-green.svg)](LICENSE) [![数据许可证](https://img.shields.io/badge/data-CC%20BY%204.0-green.svg)](LICENSE-DATA) RepoGuardBench 是一个用于同时研究 **bug 修复效用** 和 **prompt 注入鲁棒性** 的本地 benchmark。它会在代码仓库的产物中——README 文件、issue 文本、代码注释、测试日志和 agent 规则文件——放置惰性指令,然后测量开源权重编码 agent 是否能保持在任务上。主要实验在单张消费级 GPU 上本地运行;一个确定性的冒烟测试无需 GPU、模型服务器或 API 即可运行完整的 pipeline。 [论文](https://openreview.net/forum?id=58AGMTgU3L) · [海报](paper/poster.png) · [最终 PDF](paper/main.pdf) · [产物映射图](docs/PAPER_TO_ARTIFACT.md) · [可复现性指南](docs/REPRODUCIBILITY.md) ## 概览 | 维度 | 项目概览 | |---|---| | **研究问题** | 代码仓库携带的指令能以何种频率将本地编码 agent 从合法的修复任务中转移注意力? | | **Benchmark** | 80 个受控的 Core 任务,14 个人工策划的 Applied 任务,五种载体类型和五种惰性攻击目标 | | **评估** | 匹配的干净/污染运行,包含七个独立评分的效用和安全指标 | | **执行** | 在单 GPU 上进行本地 Ollama 推理,外加用于产物验证的快速无 GPU 模拟 pipeline | ## 海报 该海报将威胁模型、benchmark pipeline 和主要结果浓缩在一页中。它突出了能力与易受攻击性的趋势、高风险载体类型以及仅基于路径的操作网关的局限性。 [RepoGuardBench research poster](paper/poster.png) *打开图像以查看 4096 × 2304 全分辨率 PNG。* ## 主要发现 | 发现 | 来自匹配分析的证据 | |---|---| | **代码注释和 agent 规则文件是最高风险的载体** | 边际提议尝试率:代码注释 **50.9%** > 规则文件 **45.8%** > issue **13.7%** ≫ README / 测试日志 **0%**。 | | **易受攻击性随模型能力而扩展** | Qwen2.5-Coder 的提议尝试率:**0%** (1.5B) → **22%** (3B) → **58%** (7B) → **83%** (14B);落地的危险操作也相应增加。 | | **严格沙箱下的攻击完成率很低但非零** | **2.1%** 的匹配完成率,主要由一种模式主导:规则文件指令 → 删除测试。 | | **仅基于路径的操作网关遗漏了语义层面的测试删除** | D3 路径前缀网关允许在 `tests/` 下写入,因此在 D3 环境下,Qwen2.5-Coder-7B 上的规则文件 → `TEST_DELETE` 完成了 **15.4%**。 | 轻量级防御以不同的方式失败。在它们共享的 18 个任务子集中,针对五种主要防御(D0–D3 和 D5),每个匹配的效用差异置信区间都包含零,因此本研究不主张存在具有统计学意义的明确效用赢家。可选的 Claude 参考项在本地主要汇总结果之外单独报告。 ## 工作原理 ``` repository carrier | v local coding agent <---- optional context defense (D0-D2) | | proposes one structured action per turn v action defense (D3-D5) ---> sandboxed task workspace | v seven independent metrics | v matched estimates, tables, figures ``` 沙箱强制执行路径限制、命令允许/阻止列表以及环境清理。每次运行都会获得一个独立的任务工作空间。所有主要的模型路径都是本地的;可选的非本地参考项在配置和报告结果中有明确区分。 ## 快速开始 ``` make setup # install dependencies and the package in editable mode make test # unit tests; no GPU or network required make smoke # end-to-end pipeline with the deterministic mock backend make verify-paper # verify released paper claims from bundled results ``` `make smoke` 可以在几秒钟内将任务具象化、解析操作、运行沙箱、对输出进行评分并聚合结果。它不需要 Ollama 服务器、模型权重、商业 API 或 GPU。 若要使用用户自行安装的 [Ollama](https://ollama.com) 模型进行本地模型冒烟测试: ``` ollama pull qwen2.5-coder:1.5b make smoke-local MODEL=qwen2.5-coder:1.5b ``` ## 复现论文 ### 验证并从发布的结果中重新生成 ``` make verify-paper make reproduce-tables # writes reproduced/tables/*.tex make reproduce-figures # writes reproduced/figures/*.pdf ``` ### 运行一个聚焦的本地 GPU 子集 ``` python scripts/run_experiments.py --models qwen2.5-coder:3b \ --defenses D0_none D3_action_gate --carriers code_comment rule_file \ --tier core --limit-core 12 --out results/raw/subset.jsonl python scripts/audit_scoring.py \ --raw results/raw/subset.jsonl --out results/scored/subset.jsonl python scripts/aggregate_results.py \ --scored results/scored/subset.jsonl --outdir results/aggregate_subset ``` 论文规模的复现使用了四种 Qwen2.5-Coder 尺寸、八种防御、五种载体以及跨系列试点。它在配备 16 GB VRAM 的单张 RTX 4080 级别 GPU 上运行,耗时数小时。确切的命令、预算,以及产物验证与模型重跑之间的区别都在 [`docs/REPRODUCIBILITY.md`](docs/REPRODUCIBILITY.md) 中进行了说明。 ## 仓库映射图 ``` repoguard/ agent, attack, benchmark, defense, sandbox, and scoring code configs/ experiment grids and model configurations scripts/ run, audit, aggregate, reproduce, smoke, and release checks tests/ deterministic unit and integration tests data/ Core and Applied benchmark tasks, datasheet, and samples results/ released aggregates, sanitized scored streams, and examples docs/ benchmark, threat model, results, safety, and reproduction paper/ camera-ready PDF, poster, citation, and checksum ``` ## 范围、安全性与局限性 - **以本地为主要范围。** Qwen2.5-Coder (1.5B/3B/7B/14B) 和跨系列开源模型试点通过本地 Ollama 推理运行。可选的 Claude 参考项使用单独的非本地测试工具,被排除在主要的本地汇总结果之外,并且需要用户自行获取访问权限。 - **惰性 payload。** 该 benchmark 可以读取确定性的金丝雀值、写入标记、删除测试、运行 `echo` 或插入良性注释。它不包含真实的漏洞利用、数据泄露路径、机密、凭证或模型权重。 - **受控证据。** Applied 层包含 14 个任务;Core 任务是刻意简化的单文件探针。攻击是非自适应的,跨系列试点的规模小于主网格,且防御是轻量级基线,并非声称达到了最先进的保护水平。 有关声明的完整边界,请参阅 [`docs/SECURITY_AND_ETHICS.md`](docs/SECURITY_AND_ETHICS.md)、 [`SECURITY.md`](SECURITY.md) 以及论文的局限性章节。 ## 验证与 CI GitHub Actions 会在 Python 3.10–3.12 环境下运行单元测试套件、无 GPU 的端到端冒烟测试、表格重新生成、论文声明验证以及 secret/路径/PII 发布扫描。该工作流不使用任何模型权重或外部凭证。 ## 引用 请参阅 [`CITATION.cff`](CITATION.cff) 和 [`paper/citation.bib`](paper/citation.bib): ``` @misc{li2026repoguardbench, title = {RepoGuardBench: Repository-Borne Prompt Injection Attacks and Lightweight Defenses for Local Coding Agents}, author = {Li, Daoyuan}, year = {2026}, note = {Accepted at the 5th Deep Learning for Code (DL4C) Workshop at ICML 2026} } ``` DL4C 是非存档的。请将其作为研讨会演示进行引用,而不是作为 ICML 主会议或 PMLR 会议论文。 ## 许可证 - 代码基于 [MIT 许可证](LICENSE) 提供。 - Benchmark 数据和发布的结果基于 [CC BY 4.0](LICENSE-DATA) 提供。
标签:AI安全, AI风险缓解, Chat Copilot, DLL 劫持, 代码智能体, 大语言模型, 漏洞防御, 逆向工具