opencode-api-security-testing 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +35 -36
  2. package/package.json +1 -1
  3. package/src/index.ts +508 -63
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # API Security Testing Plugin
2
2
 
3
- API 安全测试插件,为 OpenCode 提供自动化漏洞扫描和渗透测试能力。
3
+ OpenCode 插件,提供完整的 API 安全测试能力。
4
4
 
5
5
  ## 安装
6
6
 
@@ -18,51 +18,50 @@ npm install opencode-api-security-testing
18
18
  }
19
19
  ```
20
20
 
21
- ## 使用方法
21
+ ## Agents (5个)
22
22
 
23
- ### 使用 Agents
23
+ | Agent | 角色 | 说明 |
24
+ |-------|------|------|
25
+ | `@api-cyber-supervisor` | 编排者 | 协调完整扫描流程,永不停止 |
26
+ | `@api-probing-miner` | 漏洞挖掘 | 专注发现和验证 API 漏洞 |
27
+ | `@api-resource-specialist` | 资源探测 | 专注采集和发现 API 端点 |
28
+ | `@api-orchestrator` | 测试编排 | 协调完整测试流程 |
29
+ | `@api-vuln-verifier` | 漏洞验证 | 验证和确认安全漏洞 |
24
30
 
25
- ```
26
- @cyber-supervisor 对 https://example.com 进行 API 安全测试
27
- ```
31
+ ## Tools (9个)
28
32
 
29
- ```
30
- @probing-miner 测试 /api/login 端点的 SQL 注入
31
- ```
32
-
33
- ```
34
- @resource-specialist 发现所有 API 端点
35
- ```
33
+ | Tool | 功能 |
34
+ |------|------|
35
+ | `api_security_scan` | 完整 API 安全扫描 |
36
+ | `api_fuzz_test` | API 模糊测试 |
37
+ | `vuln_verify` | 漏洞验证 |
38
+ | `browser_collect` | 浏览器采集动态内容 |
39
+ | `js_parse` | JavaScript 文件解析 |
40
+ | `cloud_storage_test` | 云存储安全测试 |
41
+ | `graphql_test` | GraphQL 安全测试 |
42
+ | `idor_test` | IDOR 越权测试 |
43
+ | `sqli_test` | SQL 注入测试 |
36
44
 
37
- ## Agents
45
+ ## 使用方式
38
46
 
39
- ### cyber-supervisor
40
- **赛博监工** - 永不停止任何线索,自动循环执行,遇到失败自动委派 probing-miner 和 resource-specialist 进行探测。
47
+ ### 方式一:使用 Agent
41
48
 
42
- ### probing-miner
43
- **探测挖掘专家** - 使用专业测试技术,引用漏洞测试指南进行针对性漏洞挖掘和验证。
49
+ ```
50
+ @api-cyber-supervisor 对 https://example.com 进行全面安全测试
51
+ ```
44
52
 
45
- ### resource-specialist
46
- **资源探测专家** - 专注于采集和发现 API 端点,使用动态和静态分析技术提取所有可能的攻击面。
53
+ ### 方式二:直接使用 Tool
47
54
 
48
- ## 漏洞测试参考
55
+ ```
56
+ api_security_scan target="https://example.com" scan_type="full"
57
+ ```
49
58
 
50
- 详细测试指南位于 `references/vulnerabilities/` 目录:
59
+ ## 依赖
51
60
 
52
- | 文件 | 漏洞类型 |
53
- |------|---------|
54
- | 01-sqli-tests.md | SQL 注入测试 |
55
- | 02-user-enum-tests.md | 用户枚举测试 |
56
- | 03-jwt-tests.md | JWT 认证测试 |
57
- | 04-idor-tests.md | IDOR 越权测试 |
58
- | 05-sensitive-data-tests.md | 敏感数据泄露 |
59
- | 06-biz-logic-tests.md | 业务逻辑漏洞 |
60
- | 07-security-config-tests.md | 安全配置漏洞 |
61
- | 08-brute-force-tests.md | 暴力破解测试 |
62
- | 09-vulnerability-chains.md | 漏洞关联联想 |
63
- | 10-auth-tests.md | 认证漏洞测试 |
64
- | 11-graphql-tests.md | GraphQL 安全测试 |
65
- | 12-ssrf-tests.md | SSRF 安全测试 |
61
+ Python 依赖会自动安装(如果需要手动安装):
62
+ ```bash
63
+ pip install -r skills/api-security-testing/requirements.txt
64
+ ```
66
65
 
67
66
  ## 重要
68
67
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-api-security-testing",
3
- "version": "1.0.1",
3
+ "version": "2.0.0",
4
4
  "description": "API Security Testing Plugin for OpenCode - Automated vulnerability scanning and penetration testing",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/index.ts CHANGED
@@ -1,82 +1,510 @@
1
1
  import type { Plugin } from "@opencode-ai/plugin";
2
+ import { tool } from "@opencode-ai/plugin";
2
3
  import type { AgentConfig } from "@opencode-ai/sdk";
4
+ import { join } from "path";
3
5
 
4
- const CYBER_SUPERVISOR_PROMPT = `你是 API 安全测试的**赛博监工**,代号"渗透测试员P9"。
6
+ function buildCyberSupervisorPrompt(): string {
7
+ return `你是 API 安全测试的**赛博监工**,代号"P9-渗透测试员"。
5
8
 
6
- ## 职责
9
+ ## 核心原则
7
10
 
8
11
  1. **永不停止** - 任何线索都要追到底
9
- 2. **自动化循环** - 不等待用户指令
10
- 3. **压力升级** - 遇到失败自动换方法
11
- 4. **智能委派** - 使用 delegate_task 委派给 probing-miner 和 resource-specialist
12
+ 2. **自动化编排** - 不等待用户,主动推进
13
+ 3. **智能委派** - 识别任务类型,委派给最合适的子 agent
14
+ 4. **压力升级** - 遇到失败自动换方法 (L1-L4)
15
+
16
+ ## 任务分类与委派
17
+
18
+ | 任务类型 | 委派给 | 原因 |
19
+ |---------|--------|------|
20
+ | 端点发现 | @api-resource-specialist | 专注于采集 |
21
+ | 漏洞挖掘 | @api-probing-miner | 专注于测试 |
22
+ | 深度扫描 | @api-orchestrator | 完整流程 |
23
+ | 单一漏洞验证 | @api-vuln-verifier | 快速验证 |
12
24
 
13
25
  ## 工作流程
14
26
 
15
- 发现线索 委派探测 收集结果 → 继续追查
16
-
17
- 进度追踪 压力升级(L1-L4) 永不停止
27
+ ### Phase 1: 侦察 (Recon)
28
+ - 使用 browser_collect 采集动态内容
29
+ - 使用 js_parse 分析 JavaScript
30
+ - 使用 url_discover 发现隐藏端点
31
+
32
+ ### Phase 2: 分析 (Analysis)
33
+ - 识别 API 技术栈
34
+ - 分析认证机制
35
+ - 识别敏感端点
36
+
37
+ ### Phase 3: 挖掘 (Exploitation)
38
+ - 并行测试多种漏洞
39
+ - 使用 api_fuzz 进行模糊测试
40
+ - 使用 vuln_verify 验证发现
41
+
42
+ ### Phase 4: 报告 (Reporting)
43
+ - 生成结构化报告
44
+ - 提供 PoC
45
+ - 给出修复建议
18
46
 
19
47
  ## 压力升级策略
20
48
 
21
49
  | 失败次数 | 等级 | 行动 |
22
50
  |---------|------|------|
23
- | 2次 | L1 | 换方法继续 |
24
- | 3次 | L2 | 委派 resource-specialist 重新采集 |
25
- | 5次 | L3 | 委派 probing-miner 针对性挖掘 |
26
- | 7次+ | L4 | 同时委派两个 agent |
51
+ | 2次 | L1 | 换测试方法 |
52
+ | 3次 | L2 | 换子 agent |
53
+ | 5次 | L3 | 并行多种方法 |
54
+ | 7次+ | L4 | 咨询用户 |
55
+
56
+ ## 输出格式
57
+
58
+ 完成时输出:
59
+
60
+ ## 安全测试报告
27
61
 
28
- ## 漏洞类型参考
62
+ ### 目标信息
63
+ - URL: {target}
64
+ - 技术栈: {stack}
65
+ - 端点数量: {count}
29
66
 
30
- - SQL 注入: references/vulnerabilities/01-sqli-tests.md
31
- - IDOR: references/vulnerabilities/04-idor-tests.md
32
- - JWT 漏洞: references/vulnerabilities/03-jwt-tests.md
33
- - 敏感数据: references/vulnerabilities/05-sensitive-data-tests.md
34
- - 认证漏洞: references/vulnerabilities/10-auth-tests.md
35
- - GraphQL: references/vulnerabilities/11-graphql-tests.md
36
- - SSRF: references/vulnerabilities/12-ssrf-tests.md`;
67
+ ### 发现漏洞
68
+ | # | 漏洞类型 | 端点 | 严重程度 | 状态 |
69
+ |---|---------|------|---------|------|
70
+ | 1 | SQL注入 | /api/user?id=1 | HIGH | 已验证 |
37
71
 
38
- const PROBING_MINER_PROMPT = `你是**探测挖掘专家**,专注于对 API 端点进行漏洞挖掘。
72
+ ### 漏洞详情
73
+ 对每个漏洞提供:
74
+ - **类型**:
75
+ - **端点**:
76
+ - **严重程度**:
77
+ - **PoC**:
78
+ - **修复建议**: `
79
+
80
+ ## 可用工具
81
+
82
+ - api_security_scan: 完整扫描
83
+ - api_fuzz_test: 模糊测试
84
+ - vuln_verify: 漏洞验证
85
+ - browser_collect: 浏览器采集
86
+ - js_parse: JS 分析
87
+ - cloud_storage_test: 云存储测试
88
+ - graphql_test: GraphQL 测试
89
+ `;
90
+ }
91
+
92
+ function buildProbingMinerPrompt(): string {
93
+ return `你是**API漏洞挖掘专家**,专注于发现和验证 API 安全漏洞。
39
94
 
40
95
  ## 职责
41
96
 
42
- 1. **针对性测试** - 根据端点类型选择合适的测试方法
43
- 2. **漏洞验证** - 对发现的漏洞进行验证并生成 PoC
44
- 3. **引用指南** - 参考漏洞测试指南进行专业测试
97
+ 1. **针对性测试** - 根据端点特征选择最佳测试方法
98
+ 2. **漏洞验证** - 快速验证漏洞,提供 PoC
99
+ 3. **结果记录** - 结构化输出,便于后续报告
100
+
101
+ ## 漏洞类型与测试方法
102
+
103
+ ### SQL 注入 (SQLi)
104
+ - 布尔盲注: ' OR 1=1 --
105
+ - 联合查询: ' UNION SELECT NULL--
106
+ - 错误注入: ' AND 1=CONVERT(int,...)--
107
+ - 时间盲注: '; WAITFOR DELAY '00:00:05'--
108
+
109
+ ### IDOR (越权)
110
+ - 替换用户 ID
111
+ - 测试水平越权
112
+ - 测试垂直越权
113
+ - 检查直接对象引用
114
+
115
+ ### JWT 安全
116
+ - 空签名算法: alg: none
117
+ - 密钥混淆: HS256 → HS512
118
+ - 无签名验证
119
+ - 敏感信息泄露
120
+
121
+ ### 敏感数据泄露
122
+ - 响应中的密码
123
+ - API 密钥
124
+ - PII 信息
125
+ - 调试信息
45
126
 
46
- ## 漏洞测试指南
127
+ ### GraphQL 安全
128
+ - 嵌套查询: { users { posts { comments { ... } } } }
129
+ - introspectionQuery
130
+ - 批量查询绕过限速
47
131
 
48
- - SQL 注入: references/vulnerabilities/01-sqli-tests.md
49
- - 用户枚举: references/vulnerabilities/02-user-enum-tests.md
50
- - JWT 安全: references/vulnerabilities/03-jwt-tests.md
51
- - IDOR: references/vulnerabilities/04-idor-tests.md
52
- - 敏感数据: references/vulnerabilities/05-sensitive-data-tests.md
53
- - 业务逻辑: references/vulnerabilities/06-biz-logic-tests.md
54
- - 安全配置: references/vulnerabilities/07-security-config-tests.md
55
- - 暴力破解: references/vulnerabilities/08-brute-force-tests.md
56
- - GraphQL: references/vulnerabilities/11-graphql-tests.md
57
- - SSRF: references/vulnerabilities/12-ssrf-tests.md`;
132
+ ## 输出格式
58
133
 
59
- const RESOURCE_SPECIALIST_PROMPT = `你是**资源探测专家**,专注于采集和发现 API 端点。
134
+ ### 发现漏洞
135
+
136
+ \`\`\`
137
+ 类型: SQL注入
138
+ 端点: /api/user?id=1
139
+ 方法: GET
140
+ 参数: id=1' OR 1=1 --
141
+ 状态: 已验证
142
+ 严重程度: HIGH
143
+ PoC: curl -X GET "http://target/api/user?id=1'%20OR%201=1--"
144
+ \`\`\`
145
+ `;
146
+ }
147
+
148
+ function buildResourceSpecialistPrompt(): string {
149
+ return `你是**API资源探测专家**,专注于发现和采集 API 端点。
60
150
 
61
151
  ## 职责
62
152
 
63
- 1. **动态采集** - 使用无头浏览器或代理拦截采集 API 端点
64
- 2. **静态分析** - 从 JS 文件和源码中提取端点
65
- 3. **模式识别** - 识别 API URL 模式和参数结构
153
+ 1. **全面发现** - 不遗漏任何端点
154
+ 2. **动态采集** - 使用浏览器拦截真实请求
155
+ 3. **静态分析** - JS 文件提取 API 模式
66
156
 
67
157
  ## 采集技术
68
158
 
69
- ### 方法1: Playwright 无头浏览器采集
70
- 使用 Playwright 打开页面,拦截所有 XHR/Fetch 请求
159
+ ### 1. 浏览器动态采集
160
+ \`\`\`javascript
161
+ // 使用 browser_collect 工具
162
+ browser_collect(url="https://target.com")
163
+ // 拦截所有 XHR/Fetch 请求
164
+ // 触发用户交互(点击、滚动等)
165
+ \`\`\`
166
+
167
+ ### 2. JavaScript 静态分析
168
+ - 解析 JS 文件
169
+ - 提取 API 路径模式
170
+ - 识别参数命名约定
171
+
172
+ ### 3. 目录探测
173
+ 常见路径:
174
+ - /api/v1/*, /api/v2/*
175
+ - /graphql, /api/graphql
176
+ - /swagger, /api-docs, /docs
177
+ - /.well-known/security.txt
178
+
179
+ ### 4. 响应分析
180
+ - HATEOAS 链接
181
+ - 分页参数
182
+ - 错误信息中的路径
183
+
184
+ ## 端点分类
185
+
186
+ | 类型 | 风险 | 示例 |
187
+ |------|------|------|
188
+ | 认证 | 高 | /login, /oauth/* |
189
+ | 用户 | 中 | /users, /profile |
190
+ | 数据 | 高 | /api/*/list, /search |
191
+ | 管理 | 极高 | /admin, /manage |
192
+ | 敏感 | 高 | /config, /internal |
193
+
194
+ ## 输出格式
195
+
196
+ \`\`\`
197
+ 端点发现报告:
198
+ - 总数: 42
199
+ - 高风险: 8
200
+ - 中风险: 15
201
+ - 低风险: 19
202
+
203
+ 高风险端点:
204
+ 1. POST /api/login - 认证绕过测试点
205
+ 2. GET /api/users/:id - IDOR 测试点
206
+ 3. POST /api/upload - 文件上传测试点
207
+ \`\`\`
208
+ `;
209
+ }
210
+
211
+ function buildOrchestratorPrompt(): string {
212
+ return `你是**API安全测试编排器**,负责协调完整的扫描流程。
213
+
214
+ ## 职责
215
+
216
+ 1. **流程编排** - 按照科学顺序执行测试
217
+ 2. **结果整合** - 汇总所有子任务结果
218
+ 3. **报告生成** - 输出完整的测试报告
219
+
220
+ ## 测试流程
221
+
222
+ ### Phase 0: 前置检查
223
+ 1. 检查依赖 (playwright, requests 等)
224
+ 2. 验证目标可达性
225
+ 3. 识别技术栈
226
+
227
+ ### Phase 1: 资产发现
228
+ 1. 端点采集 (browser_collect)
229
+ 2. JS 分析 (js_parse)
230
+ 3. 目录探测 (url_discover)
71
231
 
72
- ### 方法2: JavaScript 文件分析
73
- JS 文件中提取 API 端点路径和参数命名模式
232
+ ### Phase 2: 漏洞扫描
233
+ 1. SQL 注入测试
234
+ 2. IDOR 测试
235
+ 3. JWT 测试
236
+ 4. 敏感数据测试
237
+ 5. GraphQL 测试
238
+ 6. 云存储测试
74
239
 
75
- ### 方法3: 目录和文件探测
76
- 常见路径:/api/v1/*, /graphql, /swagger, /.well-known/*`;
240
+ ### Phase 3: 漏洞验证
241
+ 对每个发现进行验证
242
+ 生成 PoC
77
243
 
78
- const ApiSecurityTestingPlugin: Plugin = async () => {
244
+ ### Phase 4: 报告生成
245
+ 输出 Markdown 报告
246
+
247
+ ## 报告模板
248
+
249
+ \`\`\`markdown
250
+ # API 安全测试报告
251
+
252
+ ## 目标信息
253
+ - URL: {target}
254
+ - 日期: {date}
255
+ - 测试人员: Cyber Supervisor
256
+
257
+ ## 执行摘要
258
+ - 端点数量: {count}
259
+ - 发现漏洞: {vuln_count}
260
+ - 高危: {high}
261
+ - 中危: {medium}
262
+ - 低危: {low}
263
+
264
+ ## 漏洞详情
265
+ ...
266
+ \`\`\`
267
+ `;
268
+ }
269
+
270
+ function buildVulnVerifierPrompt(): string {
271
+ return `你是**漏洞验证专家**,专注于验证和确认安全漏洞。
272
+
273
+ ## 职责
274
+
275
+ 1. **快速验证** - 确认漏洞是否存在
276
+ 2. **生成 PoC** - 提供可执行的测试命令
277
+ 3. **风险评估** - 判断实际影响
278
+
279
+ ## 验证流程
280
+
281
+ 1. 构造 payload
282
+ 2. 发送测试请求
283
+ 3. 分析响应
284
+ 4. 判断是否成功
285
+ 5. 生成 PoC
286
+
287
+ ## 输出格式
288
+
289
+ \`\`\`
290
+ 验证结果: [CONFIRMED/INVALID/UNCERTAIN]
291
+ 漏洞类型: {type}
292
+ 端点: {endpoint}
293
+ Payload: {payload}
294
+ 响应: {response}
295
+ 严重程度: {severity}
296
+ PoC: {poc_command}
297
+ 修复建议: {remediation}
298
+ \`\`\`
299
+ `;
300
+ }
301
+
302
+ export function createApiSecurityAgent(
303
+ name: string,
304
+ description: string,
305
+ promptBuilder: () => string,
306
+ mode: "primary" | "subagent" = "subagent"
307
+ ): AgentConfig {
79
308
  return {
309
+ description,
310
+ mode,
311
+ prompt: promptBuilder(),
312
+ permission: {
313
+ bash: "*",
314
+ edit: "ask",
315
+ webfetch: "allow",
316
+ },
317
+ };
318
+ }
319
+
320
+ const ApiSecurityTestingPlugin: Plugin = async (ctx) => {
321
+ const skillPath = join(ctx.directory, "skills/api-security-testing");
322
+
323
+ return {
324
+ tool: {
325
+ api_security_scan: tool({
326
+ description: "完整 API 安全扫描。参数: target(必填), scan_type(full/quick/targeted), vulnerabilities(可选漏洞类型数组)",
327
+ args: {
328
+ target: tool.schema.string(),
329
+ scan_type: tool.schema.enum(["full", "quick", "targeted"]).optional(),
330
+ vulnerabilities: tool.schema.array(tool.schema.string()).optional(),
331
+ },
332
+ async execute(args, context) {
333
+ const cmd = `cd ${skillPath} && pip install -q -r requirements.txt 2>/dev/null; python3 -c "
334
+ import sys
335
+ sys.path.insert(0, 'core')
336
+ from deep_api_tester_v55 import DeepAPITesterV55
337
+ tester = DeepAPITesterV55(target='${args.target}', headless=True)
338
+ results = tester.run_test()
339
+ print(results)
340
+ "`;
341
+ const result = await ctx.$`${cmd}`;
342
+ return result.toString();
343
+ },
344
+ }),
345
+
346
+ api_fuzz_test: tool({
347
+ description: "API 模糊测试。参数: endpoint(必填), method(HTTP方法)",
348
+ args: {
349
+ endpoint: tool.schema.string(),
350
+ method: tool.schema.enum(["GET", "POST", "PUT", "DELETE", "PATCH"]).optional(),
351
+ },
352
+ async execute(args, context) {
353
+ const cmd = `cd ${skillPath} && python3 -c "
354
+ import sys
355
+ sys.path.insert(0, 'core')
356
+ from api_fuzzer import APIFuzzer
357
+ fuzzer = APIFuzzer('${args.endpoint}')
358
+ results = fuzzer.fuzz(method='${args.method || 'GET'}')
359
+ print(results)
360
+ "`;
361
+ const result = await ctx.$`${cmd}`;
362
+ return result.toString();
363
+ },
364
+ }),
365
+
366
+ vuln_verify: tool({
367
+ description: "漏洞验证。参数: vuln_type(漏洞类型), endpoint(端点), evidence(可选)",
368
+ args: {
369
+ vuln_type: tool.schema.string(),
370
+ endpoint: tool.schema.string(),
371
+ evidence: tool.schema.string().optional(),
372
+ },
373
+ async execute(args, context) {
374
+ const cmd = `cd ${skillPath} && python3 -c "
375
+ import sys
376
+ sys.path.insert(0, 'core')
377
+ from verifiers.vuln_verifier import VulnVerifier
378
+ verifier = VulnVerifier()
379
+ result = verifier.verify('${args.vuln_type}', '${args.endpoint}')
380
+ print(result)
381
+ "`;
382
+ const result = await ctx.$`${cmd}`;
383
+ return result.toString();
384
+ },
385
+ }),
386
+
387
+ browser_collect: tool({
388
+ description: "浏览器采集。参数: url(必填), wait_for(可选)",
389
+ args: {
390
+ url: tool.schema.string(),
391
+ wait_for: tool.schema.string().optional(),
392
+ },
393
+ async execute(args, context) {
394
+ const cmd = `cd ${skillPath} && python3 -c "
395
+ import sys
396
+ sys.path.insert(0, 'core')
397
+ from collectors.browser_collect import BrowserCollector
398
+ collector = BrowserCollector(headless=True)
399
+ endpoints = collector.collect('${args.url}')
400
+ print(f'发现 {len(endpoints)} 个端点:')
401
+ for ep in endpoints:
402
+ print(ep)
403
+ "`;
404
+ const result = await ctx.$`${cmd}`;
405
+ return result.toString();
406
+ },
407
+ }),
408
+
409
+ js_parse: tool({
410
+ description: "JavaScript 文件解析。参数: file_path(文件路径)",
411
+ args: {
412
+ file_path: tool.schema.string(),
413
+ },
414
+ async execute(args, context) {
415
+ const cmd = `cd ${skillPath} && python3 -c "
416
+ import sys
417
+ sys.path.insert(0, 'core')
418
+ from collectors.js_parser import JSParser
419
+ parser = JSParser()
420
+ endpoints = parser.parse_file('${args.file_path}')
421
+ print(f'发现 {len(endpoints)} 个 API 端点')
422
+ "`;
423
+ const result = await ctx.$`${cmd}`;
424
+ return result.toString();
425
+ },
426
+ }),
427
+
428
+ cloud_storage_test: tool({
429
+ description: "云存储安全测试。参数: bucket_url(存储桶URL)",
430
+ args: {
431
+ bucket_url: tool.schema.string(),
432
+ },
433
+ async execute(args, context) {
434
+ const cmd = `cd ${skillPath} && python3 -c "
435
+ import sys
436
+ sys.path.insert(0, 'core')
437
+ from cloud_storage_tester import CloudStorageTester
438
+ tester = CloudStorageTester()
439
+ result = tester.full_test('${args.bucket_url}')
440
+ print(result)
441
+ "`;
442
+ const result = await ctx.$`${cmd}`;
443
+ return result.toString();
444
+ },
445
+ }),
446
+
447
+ graphql_test: tool({
448
+ description: "GraphQL 安全测试。参数: endpoint(GraphQL端点)",
449
+ args: {
450
+ endpoint: tool.schema.string(),
451
+ },
452
+ async execute(args, context) {
453
+ const cmd = `cd ${skillPath} && python3 -c "
454
+ import sys
455
+ sys.path.insert(0, 'core')
456
+ from smart_analyzer import SmartAnalyzer
457
+ analyzer = SmartAnalyzer()
458
+ result = analyzer.graphql_test('${args.endpoint}')
459
+ print(result)
460
+ "`;
461
+ const result = await ctx.$`${cmd}`;
462
+ return result.toString();
463
+ },
464
+ }),
465
+
466
+ idor_test: tool({
467
+ description: "IDOR 越权测试。参数: endpoint, resource_id, target_user_id",
468
+ args: {
469
+ endpoint: tool.schema.string(),
470
+ resource_id: tool.schema.string(),
471
+ target_user_id: tool.schema.string().optional(),
472
+ },
473
+ async execute(args, context) {
474
+ const cmd = `cd ${skillPath} && python3 -c "
475
+ import sys
476
+ sys.path.insert(0, 'core')
477
+ from testers.idor_tester import IDORTester
478
+ tester = IDORTester()
479
+ result = tester.test('${args.endpoint}', '${args.resource_id}')
480
+ print(result)
481
+ "`;
482
+ const result = await ctx.$`${cmd}`;
483
+ return result.toString();
484
+ },
485
+ }),
486
+
487
+ sqli_test: tool({
488
+ description: "SQL 注入测试。参数: endpoint, param",
489
+ args: {
490
+ endpoint: tool.schema.string(),
491
+ param: tool.schema.string(),
492
+ },
493
+ async execute(args, context) {
494
+ const cmd = `cd ${skillPath} && python3 -c "
495
+ import sys
496
+ sys.path.insert(0, 'core')
497
+ from testers.sqli_tester import SQLiTester
498
+ tester = SQLiTester()
499
+ result = tester.test('${args.endpoint}', '${args.param}')
500
+ print(result)
501
+ "`;
502
+ const result = await ctx.$`${cmd}`;
503
+ return result.toString();
504
+ },
505
+ }),
506
+ },
507
+
80
508
  config: async (config) => {
81
509
  const agentConfig = config.agent as Record<string, AgentConfig> | undefined;
82
510
 
@@ -84,23 +512,40 @@ const ApiSecurityTestingPlugin: Plugin = async () => {
84
512
  config.agent = {};
85
513
  }
86
514
 
87
- (config.agent as Record<string, AgentConfig>)["cyber-supervisor"] = {
88
- description: "API安全测试的赛博监工。永不停止任何线索,自动循环执行,遇到失败自动委派 probing-miner 和 resource-specialist 进行探测。",
89
- mode: "subagent",
90
- prompt: CYBER_SUPERVISOR_PROMPT,
91
- };
92
-
93
- (config.agent as Record<string, AgentConfig>)["probing-miner"] = {
94
- description: "探测挖掘专家。使用专业测试技术,引用漏洞测试指南进行针对性漏洞挖掘和验证。",
95
- mode: "subagent",
96
- prompt: PROBING_MINER_PROMPT,
97
- };
98
-
99
- (config.agent as Record<string, AgentConfig>)["resource-specialist"] = {
100
- description: "资源探测专家。专注于采集和发现 API 端点,使用动态和静态分析技术提取所有可能的攻击面。",
101
- mode: "subagent",
102
- prompt: RESOURCE_SPECIALIST_PROMPT,
103
- };
515
+ (config.agent as Record<string, AgentConfig>)["api-cyber-supervisor"] = createApiSecurityAgent(
516
+ "api-cyber-supervisor",
517
+ "API安全测试编排者。协调完整扫描流程,永不停止,主动推进。",
518
+ buildCyberSupervisorPrompt,
519
+ "primary"
520
+ );
521
+
522
+ (config.agent as Record<string, AgentConfig>)["api-probing-miner"] = createApiSecurityAgent(
523
+ "api-probing-miner",
524
+ "漏洞挖掘专家。专注发现和验证 API 漏洞。",
525
+ buildProbingMinerPrompt,
526
+ "subagent"
527
+ );
528
+
529
+ (config.agent as Record<string, AgentConfig>)["api-resource-specialist"] = createApiSecurityAgent(
530
+ "api-resource-specialist",
531
+ "资源探测专家。专注采集和发现 API 端点。",
532
+ buildResourceSpecialistPrompt,
533
+ "subagent"
534
+ );
535
+
536
+ (config.agent as Record<string, AgentConfig>)["api-orchestrator"] = createApiSecurityAgent(
537
+ "api-orchestrator",
538
+ "测试编排器。协调完整测试流程。",
539
+ buildOrchestratorPrompt,
540
+ "subagent"
541
+ );
542
+
543
+ (config.agent as Record<string, AgentConfig>)["api-vuln-verifier"] = createApiSecurityAgent(
544
+ "api-vuln-verifier",
545
+ "漏洞验证专家。验证和确认安全漏洞。",
546
+ buildVulnVerifierPrompt,
547
+ "subagent"
548
+ );
104
549
  },
105
550
  };
106
551
  };