DaoyuanLi2816/RepoGuardBench
GitHub: DaoyuanLi2816/RepoGuardBench
该 benchmark 用于评估本地编码 agent 面对代码仓库内 prompt 注入攻击时的 bug 修复效用与鲁棒性,并对比多种轻量级防御策略的效果。
Stars: 8 | Forks: 0
# RepoGuardBench
**衡量本地编码 agent 在代码仓库内容试图转移其注意力时,是否仍能继续修复 bug。**
[](https://github.com/DaoyuanLi2816/RepoGuardBench/actions/workflows/ci.yml)
[](https://openreview.net/forum?id=58AGMTgU3L)
[](paper/poster.png)
[](LICENSE)
[](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 和主要结果浓缩在一页中。它突出了能力与易受攻击性的趋势、高风险载体类型以及仅基于路径的操作网关的局限性。
[
](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) 提供。
](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 劫持, 代码智能体, 大语言模型, 漏洞防御, 逆向工具