heidericklucas/go-security-swe-bench
GitHub: heidericklucas/go-security-swe-bench
一个 SWE-bench 风格的 RL 评测环境,用于衡量 AI 模型在 Go 后端安全漏洞修复任务上的能力,包含六个真实漏洞实例和封闭式 Docker 评分器。
Stars: 0 | Forks: 0
# go-security-swe-bench
一个 SWE-bench 风格的 RL 环境,用于评估 AI 模型在真实安全漏洞修复任务上的能力。
## 是什么
该 benchmark 包含 6 个单缺陷 Go 应用实例,每个实例都提出了一个真实的安全漏洞(SSRF、JWT 伪造、SQLi、IDOR、XSS、路径遍历)。模型会收到问题描述和存在漏洞的源代码,然后被要求对其进行修复。性能评估采用二元方式:修复方案通过所有测试(奖励 1.0)或未通过(奖励 0.0)。
## 为什么
安全漏洞是生产软件中的主要威胁载体,但很少有 benchmark 会评估与 AI 安全相关的修复工作流。此 benchmark 旨在测试:
- 识别和修复真实 exploit 模式的能力
- 抵抗破坏合法功能的“修复”方案的能力
- 防御看似有效但遗漏了关键情况的对抗性 patch 的鲁棒性
## 怎么做
### 构建
```
make build
```
离线编译检查每个 package(`go build -mod=vendor ./...`)。grader 本身不会进行任何构建——它是在固定的 container 中从源码运行 `go test`。
### 运行测试(离线)
```
make test
```
在基础 app 上运行单元测试和功能测试。这些测试在基础 app 上会**通过**——app 的合法功能完好无损。安全缺陷由 grader 保留的 exploit 测试(通过 `make verify`)单独证明,而不是通过 `make test`。
### 对基础应用评分(预期奖励为 0)
```
make verify
```
在 Docker 中运行测试工具,针对所有 6 个实例对基础 app 进行评分。所有实例都应失败(未应用任何修复)。
### 使用 Golden Patches 评分(预期奖励为 1.0)
```
make verify-solution
```
应用每个标准解决方案 patch 并进行评分。所有实例都应通过。
### 对抗性 Patch 评分(预期奖励为 0)
```
make verify-attacks
```
应用故意写坏的“修复”来验证测试套件是否能捕获不充分的修复。所有实例都应失败。
### 覆盖率
```
make cover
```
报告 `app/` 代码中每个函数的覆盖率。这仅在仓库自身的 CI 中运行——它**绝不**是奖励函数的一部分。
## 实例
每个实例包含:
- **问题描述**(对模型可见):`tasks/.md`
- 包含测试契约的 **manifest**:`tasks/.json`
- **golden patch**:`solution/.patch`
| ID | 漏洞 | CWE | OWASP | 问题描述 |
|---|---|---|---|---|
| `ssrf-import` | 通过重定向跟随引发的 SSRF | CWE-918 | A10:2021 | [tasks/ssrf-import.md](tasks/ssrf-import.md) |
| `jwt-forged-token` | JWT 伪造(未验证签名) | CWE-347 | A07:2021 | [tasks/jwt-forged-token.md](tasks/jwt-forged-token.md) |
| `sqli-note-search` | 笔记搜索中的 SQL 注入 | CWE-89 | A03:2021 | [tasks/sqli-note-search.md](tasks/sqli-note-search.md) |
| `idor-note-read` | 损坏的对象级访问控制 | CWE-639 | A01:2021 | [tasks/idor-note-read.md](tasks/idor-note-read.md) |
| `xss-note-export` | 存储型 XSS(缺少输出编码) | CWE-79 | A03:2021 | [tasks/xss-note-export.md](tasks/xss-note-export.md) |
| `pathtraversal-attachment` | 文件下载中的路径遍历 | CWE-22 | A01:2021 | [tasks/pathtraversal-attachment.md](tasks/pathtraversal-attachment.md) |
## 模型评估
该测试工具向每个模型展示:
1. 问题描述(以症状为主,无修复提示)
2. 对 `app/` 源代码的只读访问权限
3. 预期的失败测试列表
4. 模型必须对 `app/` 打补丁以使所有测试通过
模型**无法看到**:
- `tests/exploit/` 中的 exploit 代码
- `solution/` 中的 golden patch
- 此 README 或任何 grader 内部细节
修复方案在 Docker 中进行确定性评估:
- 二元奖励(0.0 或 1.0)
- 必须通过所有 `fail_to_pass` 测试
- 不得破坏任何 `pass_to_pass` 测试
- 构建错误或超时将给予 0 奖励
## 文档
- [REVIEW.md](REVIEW.md) — 对候选 patch 的代码审查,包括那些**通过了自动化 grader(奖励 1.0)但仍然是错误**的 patch,以及性能和可维护性发现
- [DECISIONS.md](docs/DECISIONS.md) — 架构决策记录
- [solution/WRITEUP.md](solution/WRITEUP.md) — 每个实例的 exploit 叙述和标准推理过程(仅限 grader 使用;不向模型展示)
## 仓库结构
```
.
├── app/ # Application source (Go packages; the model patches this)
├── tests/
│ ├── exploit/ # Exploit proofs — FAIL_TO_PASS (grader-only)
│ ├── functional/ # Positive contracts + happy path — PASS_TO_PASS
│ ├── harness/ # Shared in-process test app (held-out)
│ └── adversarial/ # Reward-hacking patches proven to score 0
├── tasks/ # Instance manifests (*.json) + model-visible statements (*.md)
├── solution/ # Golden patches + WRITEUP (grader-only)
├── harness/ # Python grader (run_eval.py) + schema
├── docs/ # DECISIONS.md and review-samples/
├── REVIEW.md # Code review of candidate patches
├── Makefile
└── go.mod, go.sum, vendor/ # Vendored deps (hermetic, offline build)
```
## 许可证
MIT — 查看 [LICENSE](LICENSE)。
标签:EVTX分析, Go, Ruby工具, 人工智能, 代码大模型评测, 强化学习, 日志审计, 漏洞修复, 用户模式Hook绕过, 网络安全培训, 请求拦截, 逆向工具