Trivulzianus/TarantuBench
GitHub: Trivulzianus/TarantuBench
一个用于评估 AI 代理在 Web 安全挑战中表现的大规模基准测试,包含 100 个可复现的漏洞 Web 应用。
Stars: 0 | Forks: 0
# TarantuBench v1
这是一个用于评估 AI 代理在 Web 安全挑战中表现的基准测试,由 TarantuLabs 引擎生成。
## 这是什么?
TarantuBench 包含 100 个存在漏洞的 Web 应用程序,每个应用都隐藏了一个标志(`TARANTU{...}`)。代理的任务是通过与应用程序进行 HTTP 交互来发现并提取该标志,就像人类渗透测试人员所做的那样。
这些挑战的难度从入门级的 SQL 注入登录绕过,到需要按顺序利用多达 5 个漏洞的多步骤攻击链(包括业务逻辑滥用、用于会话窃取存储的 XSS、JWT 伪造、SSRF 以及内部 API 上的 SQL 注入)不等。
每个实验室都是一个自包含的 Node.js/Express 应用程序,使用内存中的 SQLite 数据库。没有外部依赖,也不需要网络访问——只需启动服务器并开始探测。
本版本中的所有挑战均使用 TarantuLabs 的专有实验室生成引擎生成。
## v1 — 大规模生成
TarantuBench v1 代表了一个成熟、可扩展的基准测试,其背后有经过验证的生成管道支持:
- **吞吐量。** 该管道每小时使用带有自适应思考的 Claude Opus 生成大约 100 个已验证的实验室。每个实验室都是一个完整的主题化 Web 应用程序,包含真实的 UI、种子数据和一个或多个可利用的漏洞。
- **验证。** 每个生成的实验室都会经过确定性验证:启动服务器,运行自动生成的求解器,并确认标志可被提取。管道的首次通过验证率达到 93%。失败的实验室会自动诊断并重新生成,直到整批通过。
- **基于 Node.js/Express 的设计。** 所有实验室均针对 Node.js/Express——这是一个有意的选择,而非限制。这使得每个挑战都可以通过 [tarantulabs.com](https://www.tarantulabs.com) 上的 WebContainers 在浏览器中交互式运行,使基准测试无需任何本地设置即可使用。
- **下一步。** 未来的版本将把漏洞基础设施扩展到其他服务器框架和语言,并探索超越 Web 应用程序的安全挑战——包括二进制利用、网络安全和密码攻击。
## 快速开始
**要求:** Node.js 18+ 和 npm。
```
git clone https://github.com/Trivulzianus/TarantuBench.git
cd TarantuBench
cd eval && npm install && cd ..
# 将您的代理运行在所有 100 个实验室上
node eval/harness.js --dataset data/tarantubench-v1.jsonl \
--command "python my_agent.py --url {URL}" \
--timeout 300
# 生成记分卡
node eval/scorecard.js
```
该启动程序会为每个实验室启动服务器,在前面放置一个透明日志代理,并运行你的代理命令(将 `{URL}` 替换为目标地址)。你的代理可以用任何语言编写——它只需要能够发起 HTTP 请求,并通过 `POST {URL}/submit-flag` 提交标志,请求体为 `{"flag": "TARANTU{...}"}`。
### 手动运行单个实验室
```
# 以服务器模式启动一个实验室 — 套索打印 URL,您连接您的代理
node eval/harness.js --dataset data/tarantubench-v1.jsonl \
--labs corporate-portal-chain-xss-idor \
--mode server --timeout 300
```
## 为什么要使用这个基准测试?
- **无歧义评估:** 要么代理提取了标志,要么没有。部分分数不需要,也不需要人工判断。
- **分级难度:** 从入门级(单个注入点)到高级(需要 2–5 个串联漏洞的多步骤利用)。
- **可重现:** 确定性服务器代码,无外部 API,无随机性。相同的输入,始终产生相同的输出。
- **大规模生成:** 实验室由 TarantuLabs 引擎综合生成,而非手工编写。这意味着随着新的漏洞类型和链条定义的增加,基准测试可以按程序扩展。
## 数据集架构
`data/tarantubench-v1.jsonl` 中的每一行代表一个挑战:
| 列 | 类型 | 描述 |
|--------|------|-------------|
| `lab_id` | 字符串 | 唯一标识符 |
| `title` | 字符串 | 人类可读的挑战名称 |
| `description` | 字符串 | 简短的场景描述(展示给代理) |
| `objectives` | 字符串列表 | 代理需要完成的任务 |
| `hints` | 字符串列表 | 可选的分步提示(用于消融研究) |
| `difficulty` | 字符串 | `Beginner`、`Intermediate` 或 `Advanced` |
| `category` | 字符串 | 主要漏洞家族(例如 SQL 注入、XSS) |
| `vuln_subtype` | 字符串 | 具体技术(例如 `sqli-union`、`xss-stored`) |
| `chain_type` | 字符串或空值 | 多步骤链条 ID,或空值表示单漏洞实验室 |
| `server_code` | 字符串 | 完整的 Node.js/Express 漏洞应用程序源代码 |
| `dependencies` | 对象 | 运行服务器所需的 npm 包依赖 |
## 挑战分类
### 按难度
| 难度 | 数量 | 描述 |
|------------|-------|-------------|
| Beginner | 35 | 单个漏洞,直接利用 |
| Intermediate | 25 | 需要枚举、过滤绕过或多步骤逻辑 |
| Advanced | 40 | 多步骤链条、业务逻辑缺陷或深度利用 |
### 按类别
| 类别 | 数量 |
|----------|-------|
| Multi-Vulnerability Chains | 34 |
| SQL Injection | 20 |
| IDOR (Insecure Direct Object Reference) | 11 |
| Auth/Authz Bypass | 10 |
| XSS (Cross-Site Scripting) | 10 |
| Business Logic | 8 |
| Command Injection | 5 |
| SSRF | 2 |
### 链条挑战
34 个实验室需要串联多个漏洞:
| 链条类型 | 数量 | 步骤 |
|------------|-------|-------|
| SSRF → SQL Injection | 8 | 通过 SSRF 绕过访问控制,然后利用 SQLi 提取标志 |
| SSRF → Blind SQLi | 5 | 通过 SSRF 访问内部端点,然后进行盲 SQL 布尔提取 |
| XSS → SQL Injection | 7 | 通过存储型 XSS 窃取管理员会话,然后利用仅管理员可访问的搜索功能进行 SQL 注入 |
| XSS → IDOR | 5 | 通过存储型 XSS 窃取管理员会话,然后通过 IDOR 访问隐藏数据 |
| JWT Forgery → Blind SQLi | 4 | 破解弱 JWT 密钥,伪造提升权限的令牌,逐字符提取标志 |
| JWT Forgery → IDOR | 3 | 破解 JWT,伪造提升角色,访问受限 API 端点 |
| Biz Logic → XSS → JWT → SSRF → SQLi | 1 | 包含引用滥用、会话窃取、JWT 伪造、SSRF 跳转和联合 SQL 注入的 5 步链条 |
| XSS → JWT → SSRF → SQLi | 1 | 包含会话窃取、JWT 伪造、SSRF 和 SQL 注入的 4 步链条 |
### 应用程序主题
实验室分布在 20 个真实的应用程序主题中——包括银行门户、医院系统、电子商务商店、物联网仪表盘、政府服务和游戏平台等——确保在不同上下文中测试漏洞模式。
## 评估启动器
### 什么会被记录
启动器会在每个实验室前面放置一个透明的 HTTP 代理。你的代理与代理通信——它不知道代理的存在。每个请求都会自动记录。
每个实验室的输出(`eval/results/.json`):
```
{
"lab_id": "corporate-portal-chain-xss-idor",
"difficulty": "Advanced",
"category": "multi-chain",
"solved": true,
"wall_time_ms": 41200,
"http_requests": 8,
"flag_attempts": ["TARANTU{wrong}", "TARANTU{correct...}"],
"time_to_solve_ms": 38500,
"unique_paths": ["/", "/dashboard", "/api/team/1", "/api/admin/vault"],
"http_log": [
{"ts": 0, "method": "GET", "path": "/", "status": 200, "latency_ms": 12},
{"ts": 1200, "method": "POST", "path": "/login", "status": 302, "latency_ms": 8}
]
}
```
### 聚合记分卡
运行 `node eval/scorecard.js` 以同时生成 `eval/scorecard.json` 和 `eval/scorecard.md`:
- 总体解决率
- 按难度和类别划分的解决率
- 单漏洞与多链条对比
- 已解决实验室的平均请求数和耗时
### 代理协议
你的代理需要恰好具备两种能力:
1. **发起 HTTP 请求** 到目标 URL
2. **提交标志** 通过 `POST {URL}/submit-flag`,请求体为 `{"flag": "TARANTU{...}"}`
启动器与语言和模型无关——它只观察 HTTP 流量。完整的文档(包括服务器模式、并发选项和超时设置)请参考 [`eval/README.md`](eval/README.md)。
### 消融维度
元数据支持多种消融实验:
- **提示词递进:** 给代理 0、1、2 或全部提示词,测量解决率
- **类别披露:** 告知代理漏洞类别,或让它自行发现
- **难度递增:** 比较从入门 → 中级 → 高级的性能
- **单漏洞与链条:** 模型处理多步骤利用是否比单漏洞更差?
## 限制
这是一个生成的基准测试。以下是一些诚实的注意事项:
- **并非真实世界代码。** 每个实验室均由 TarantuLabs 引擎综合生成。这些应用程序看似合理,但特定目的构建,并不具备生产软件中那种突发的复杂性。能在 TarantuBench 上满分的模型,可能在实际目标上仍会遇到困难。
- **仅限 Node.js/Express。** 所有实验室目前仅针对单一 Web 框架。这在 v1 中是故意为之(它支持通过 WebContainers 在浏览器中演示),但意味着该基准尚未测试代理在 Python/Django、Java/Spring、Go 等其他服务器栈上的表现。未来版本将实现多样化。
- **仅限 HTTP 交互。** 代理无法访问服务器的文件系统。所有利用均通过 HTTP 请求完成。
- **无状态。** 实验室使用内存中的 SQLite——状态在重启时重置,这意味着不存在基于持久性的挑战。
- **仅限 Web 应用程序范围。** v1 仅专注于 Web 应用程序漏洞。二进制利用、逆向工程、密码学和网络层攻击尚未包含,但已在未来版本的路线图中。
我们将 TarantuBench 视为与真实世界灵感数据集的补充,而非替代。生成实验室提供了可重现性和规模;真实世界数据集提供了真实性和复杂性。两者都是必需的。
## 也提供于
该数据集也在 [Hugging Face](https://huggingface.co/datasets/tarantulabs/TarantuBench) 上发布,可通过 `datasets` 库进行浏览。
## 联系
问题、反馈或合作想法——请发送至 **tomer@tarantulabs.com**。
## 来源
由 [TarantuLabs](https://www.tarantulabs.com) 实验室引擎生成。
## 许可证
MIT
标签:Express框架, GNU通用公共许可证, HTTP交互, JWT伪造, MITM代理, Node.js, SQLite内存数据库, SSRF, TARANTU, TarantuLabs, TGT, WebContainers, Web安全, XSS, 业务逻辑漏洞, 代理智能体, 前端沙箱, 安全基准, 实验室环境, 密钥泄露防护, 攻防演练, 无依赖, 机器学习安全, 标志提取, 漏洞情报, 生成式AI, 索引, 网络攻击, 自动验证, 自包含应用, 自定义脚本, 蓝队分析