pr0f94/Squadrone
GitHub: pr0f94/Squadrone
Squadrone 是一个基于多 Agent 架构的 WordPress 插件漏洞研究工具,通过源码分析、沙箱验证和去重流程生成可直接披露的报告草稿。
Stars: 0 | Forks: 0
Squadrone
针对 WordPress 插件运行多 agent 漏洞研究。
源码级分类、沙箱验证以及私人披露草稿。
大多数漏洞扫描器仅停留在模式匹配阶段。Squadrone 针对 WordPress 插件运行完整的调研流程:拉取插件源码,映射可达入口点,调度专业 agent 形成假设,在 Docker WordPress 沙箱中验证幸存的漏洞,与已知漏洞数据库进行去重,并编写可直接披露的报告草稿。
您将获得:
- **一键插件扫描**,只需提供 WordPress.org 插件 slug
- **专业 agent 覆盖**,包括身份验证、验证流程、对象授权、状态变更、支付逻辑、注入、文件操作、SSRF/反序列化、存储型至管理员路径、XSS 以及逻辑缺陷
- **基于源码的分类**,根据可利用性和 Wordfence/Patchstack 漏洞范围规则进行评估
- **平衡的质量门禁**,拒绝明显的误报,同时将边缘证据或影响保留以供人工审查
- **沙箱验证**,配备独立的 WordPress 安装环境和迭代 PoC 尝试
- **已知漏洞去重**,当 API 密钥可用时,针对 Wordfence Intelligence 和 WPScan 进行比对
- **新漏洞的私人报告草稿**,没有自动提交路径
## ⚡ 快速开始
首先安装以下前置条件,并确保在开始扫描之前 Docker Desktop
正在运行。
```
git clone https://github.com/pr0f94/Squadrone.git squadrone
cd squadrone
python3.12 -m venv .venv
.venv/bin/python -m pip install -e ".[dev]"
cp .env.example .env
$EDITOR .env
set -a; . ./.env; set +a
.venv/bin/squadrone --help
.venv/bin/squadrone scan hello-dolly
```
默认流程使用 Anthropic 模型,因此在运行扫描之前,请在 `.env` 中设置 `ANTHROPIC_API_KEY`。
如果想改用 ChatGPT 订阅 OAuth,请运行:
```
.venv/bin/squadrone scan hello-dolly --config pipelines/openai.yaml
```
每次扫描都会将产物写入 `plugins/
/runs//` 目录下。
```
Intake version 1.7.2 · files 42 · lines 4,812
Recon entry points 8 · sinks 3
Hypothesis count 2
Triage accepted 1 · rejected 1 · merged 0 · manual review 0
Verify findings 1
Report reports 2
```
首次使用时,SQLite 索引会在 `db/squadrone.sqlite` 自动创建。
SQLite 连接使用 WAL 模式和 busy timeout,因此批量扫描可以共享
运行索引和 LLM 缓存,而不会出现大多数瞬时锁定失败。
## 它的功能
1. 从 `plugins.svn.wordpress.org` 拉取插件源码,如果未安装 `svn`,则回退到 WordPress.org 插件 ZIP 包。
2. 映射攻击面:可达入口点、nonce/capability 检查、高风险 sink、插件类型、敏感对象、自定义角色/capability 以及高风险工作流。
3. 运行具有角色感知和工作流感知的专业 LLM agent,按需使用 `grep_plugin`、`glob_plugin` 和 `read_plugin_file` 工具,而不是将整个插件转储到上下文中。
4. 自我验证假设,仅剔除绝对无根据的声明,例如虚构的 sink、不可能的漏洞类别或明确遗漏的防护。
5. 为 AJAX/REST、表单、文件、auth、SQL、支付逻辑和渲染路径构建重点区域映射。
6. 根据可利用性和悬赏范围规则对幸存项进行分类,当使用多次分类投票时,包含对抗性拒绝阶段;对于分歧的投票,将被路由到人工审查。
7. 应用平衡的质量门禁:证据完整性、WordPress 误报规则、推导出的严重性,以及对边缘情况的人工审查路由。
8. 为接受的假设构建一次性 Docker WordPress 沙箱。
9. 针对沙箱迭代运行由 LLM 编写的 Python PoC。
10. 在配置了密钥的情况下,将确认的漏洞与 Wordfence Intelligence 和 WPScan 进行去重。
11. 在编写披露草稿之前运行报告质量门禁。
12. 为每个漏洞和项目编写私人报告草稿。
13. 将运行元数据和漏洞记录在 SQLite 中,以供日后审查。
该系统**从不自动提交**任何内容。它只生成文件。由您决定披露什么、在哪里披露以及何时披露。
## 为什么使用 agent 而不是仅使用静态扫描?
您不应该只选择一种方法。静态扫描快速且覆盖面广;agent 审查较慢,但可以跨 WordPress 惯例、漏洞利用前提条件、范围规则和 PoC 反馈进行推理。
### Squadrone 的优势
| | Squadrone | 静态 grep / 规则 |
|---|:---:|:---:|
| 针对 WordPress 的特定授权推理 | ✓ | 部分 |
| 跨文件假设生成 | ✓ | 部分 |
| 范围感知的悬赏分类 | ✓ | ✗ |
| 沙箱 PoC 验证 | ✓ | ✗ |
| 报告草稿生成 | ✓ | ✗ |
| 已知漏洞去重 | ✓ | 部分 |
| 低成本的广泛预过滤 | 部分 | ✓ |
| 确定性的重复输出 | 部分 | ✓ |
预期的工作流是保守的:将静态工具和人工审查与 Squadrone 结合使用,然后手动验证您计划报告的任何内容。
## 前置条件
- Python 3.12+
- 验证前正在运行 Docker Desktop
- `ripgrep`
- `subversion` 可选,但建议用于 WordPress.org 源码检出;当 `svn` 不可用时,Squadrone 会回退到插件 ZIP 下载
- 通过兼容 LiteLLM 的提供商进行 LLM 访问
在 macOS 上:
```
brew install ripgrep subversion
```
如果您没有安装 `subversion`,扫描仍然可以通过 ZIP
回退机制运行,但对于某些插件,历史源码布局可能不够精确。
## 🛠️ 安装
```
python3.12 -m venv .venv
.venv/bin/pip install -e ".[dev]"
```
可编辑安装会暴露:
```
.venv/bin/squadrone --help
```
## ⚙️ 配置
复制示例环境文件:
```
cp .env.example .env
```
设置与您的流程和去重需求相匹配的密钥:
| 变量 | 需求来源 | 备注 |
|---|---|---|
| `ANTHROPIC_API_KEY` | Claude 模型 | 被 `pipelines/default.yaml` 使用 |
| `OPENAI_API_KEY` | OpenAI API 模型 | `chatgpt/` 订阅模型不需要 |
| `WORDFENCE_API_KEY` | 去重阶段 | Wordfence Intelligence v3 生产环境源 |
| `WPSCAN_API_KEY` | 去重阶段 | wpscan.com 插件数据库 |
| `LITELLM_LOG` | 可选日志记录 | 示例:`WARNING` |
如果缺少 vuln-DB 密钥,去重阶段将记录警告并跳过该来源。扫描不会仅仅因为缺少去重密钥而失败。
`pipelines/` 中的 Pipeline YAML 文件控制模型、预算上限、沙箱形态、假设限制和开发者咨询上限。
`pipelines/openai.yaml` 使用 LiteLLM 的 `chatgpt/` 提供商进行 ChatGPT 订阅访问。首次使用时,LiteLLM 会启动 OAuth 设备码流程;完成浏览器登录提示后,Squadrone 将使用已认证的 ChatGPT 会话。此路径不需要 `OPENAI_API_KEY`。
## 🚀 使用
```
# 使用默认 pipeline 扫描单个 plugin
squadrone scan hello-dolly
# 使用更高 budget 进行扫描
squadrone scan contact-form-7 --budget 5.00
# 扫描特定的历史 plugin 版本
squadrone scan contact-form-7 --version 5.3.1
# 使用 OpenAI/ChatGPT pipeline
squadrone scan contact-form-7 --budget 5.00 --config pipelines/openai.yaml
# 显示详细的 stage、agent、sandbox 和 LLM 日志
squadrone scan contact-form-7 --verbose
# 跳过 sandbox 验证并将已接受的 hypotheses 加入队列以供人工审查
squadrone scan contact-form-7 --no-verify
# 当你只关心 bug 在技术上是否有效时,禁用 bounty-scope 过滤
squadrone scan contact-form-7 --ignore-scope
# 在探索性研究中禁用严格的 quality gates
squadrone scan contact-form-7 --no-strict-quality
# 要求来自三次独立 Critic pass 的多数投票
squadrone scan contact-form-7 --triage-votes 3
# 在 triage 之前在 hypotheses 之间运行 exploit-chain synthesis
squadrone scan contact-form-7 --chain
# 启用更大的 cross-file stored-XSS specialist
squadrone scan contact-form-7 --cross-file-taint
# 将扫描的版本与之前的 WordPress.org 版本进行比较
squadrone scan contact-form-7 --version 5.3.2 --diff 5.3.1
# 从文件中扫描多个 plugin,每行一个 slug
squadrone scan-batch plugins.txt
# 并行扫描多个 plugin
squadrone scan-batch plugins.txt --concurrency 3
# Batch 标志与扫描的质量/范围控制相对应
squadrone scan-batch plugins.txt --concurrency 3 --triage-votes 3 --no-verify
# 运行更高 budget 的 ChatGPT 研究 batch,包含详细日志、无 sandbox 验证、
# exploit-chain synthesis、cross-file taint review 以及三次独立的 triage 投票
squadrone scan-batch plugins.txt --budget 100 --config pipelines/openai-research.yaml --verbose --no-verify --chain --cross-file-taint --triage-votes 3
# 恢复现有的 run
squadrone scan contact-form-7 --resume
# 强制从特定 stage 重新运行
squadrone scan contact-form-7 --resume --from verify
# 检查 run 历史记录和 findings
squadrone runs list
squadrone findings show
# 交互式审查 findings
squadrone review
# 记录你手动提交的 disclosure
squadrone disclose --to wordfence --notes "Sent via Wordfence portal"
# 运行 benchmark harness
squadrone benchmark benchmarks/corpus.json --split train --budget 5.00
```
默认输出:
- `plugins//runs//intake.json`
- `plugins//runs//recon.json`
- `plugins//runs//hypotheses.jsonl`
- `plugins//runs//focus_areas.json`
- `plugins//runs//chains.json` (当使用 `--chain` 时)
- `plugins//runs//chain_diagnostics.json` (当使用 `--chain` 时)
- `plugins//runs//triaged.jsonl`
- `plugins//runs//quality_gate_triage.json`
- `plugins//runs//manual_review_queued.json` (当分类或质量门禁将任务排入人工审查时)
- `plugins//runs//findings.jsonl`
- `plugins//runs//findings_corrupt.jsonl` (如果在恢复期间隔离了格式错误的漏洞行)
- `plugins//runs//schema_invalid_.json` (如果 agent 在修复后返回了无效的结构化输出)
- `plugins//runs//decision_ledger.jsonl`
- `plugins//runs//trace.jsonl`
- `plugins//runs//report__.md`
当使用 `--no-verify` 时,分类接受的假设首先会经过质量门禁评级,然后被写入人工审查队列,而不是 `findings.jsonl`;不会生成提交报告。
当分类投票或质量门禁无法做出明确的自动决定时,该假设将被保留在人工审查队列中。每次运行的 `decision_ledger.jsonl` 会记录每次保留、拒绝、人工审查、验证、去重和报告决策的确切阶段、操作、结果、原因以及产物路径。
影响恢复的运行产物会尽可能以原子方式写入。如果
崩溃导致 `findings.jsonl` 中出现格式错误的行,Squadrone 会保留可读的
漏洞,将错误的行写入 `findings_corrupt.jsonl`,并在
`decision_ledger.jsonl` 中记录恢复情况。
## 质量门禁
Squadrone 的默认流程启用了严格的质量控制。这些是受验证器/评分器框架启发的确定性检查:
- **验证前的漏洞评分器**接受强有力的候选者,硬性拒绝明显的误报,并将边缘证据或影响路由到人工审查。
- **WordPress 误报规则**拒绝仅限管理员、self-XSS、仅限自身资源、表面问题、开放重定向和低影响 CSRF 的情况;边缘的提交价值可保留供人工审查。
- **证据优先的 schema** 为每个幸存项标注攻击者角色、source、sink、受影响的文件/函数、防护讨论、影响声明以及悬赏路由。
- **严重性重计算**推导出内部的 CVSS 风格评分和 OWASP 2021 类别,而不是信任模型编写的严重性。
- **报告评分器**如果证据或影响未达到提交标准,将阻止已确认的漏洞成为精修的报告。
- **专注的审查扇出**写入 `focus_areas.json` 并将攻击面映射输入到专业审查中。
- **V2 方法论**是默认设置:测量员映射插件类型、敏感对象、角色和工作流;专家在审查经典漏洞类别的同时,审查对象授权、状态更改、支付逻辑以及存储型到管理员的路径。
- **验证器投票**可通过 `--triage-votes N` 使用;当质量比运行时间更重要时,请使用 `3` 或 `5`。在多投票模式下,多数接受的漏洞继续进行,零接受的漏洞被拒绝,分歧投票进入人工审查。
- **漏洞利用链合成**可通过 `--chain` 使用;它通过 `chains_with`、`chain_impact` 和 `chain_severity_bump` 丰富假设,并写入 `chain_diagnostics.json`,以便区分被跳过、失败和空的链条传递。
对于想要更多原始假设的探索性扫描,请使用 `--no-strict-quality`。
## 🔍 分类
```
# 列出 run
squadrone runs list
# 显示单个 finding
squadrone findings show
# 交互式审查已完成的 run
squadrone review
```
一个已确认的漏洞通常具有:
```
{
"id": "f-...",
"poc_status": "confirmed",
"dedup_status": "novel",
"report_paths": [
"plugins//runs//report_f-..._wordfence.md",
"plugins//runs//report_f-..._patchstack.md"
]
}
```
将生成的报告视为草稿。手动确认 bug,复现 PoC,仔细检查源码侧的清理和授权,然后通过适当的渠道进行私下披露。
## 🧪 测试
```
.venv/bin/pytest tests/unit/ -q
.venv/bin/ruff check src/
.venv/bin/mypy src/
```
## 架构
- **stages/** — 异步流水线函数:intake、recon、hypothesis、triage、verify、dedup、report
- **agents/** — 基于 LLM 的 agent 和运行时工具调用循环
- **services/** — LiteLLM 网关、预算跟踪器、SVN 客户端、vuln-DB 客户端、Docker 沙箱管理器、WP-CLI 包装器
- **schemas/** — Pydantic 产物模型
- **prompts/** — 每个 agent 的 Markdown 系统提示词
- **poc_templates/** — Jinja2 PoC 骨架和 Python 辅助工具
- **orchestrator.py** — 阶段编排、SQLite 持久化、预算处理
有关更深入的设计说明,请参阅 `DESIGN.md`。
## 负责任披露
此工具仅用于授权的安全研究和负责任的披露。
预期工作流程:
1. 扫描您被允许测试的插件。
2. 手动审查已确认的漏洞。
3. 在生成的草稿之外复现并验证影响。
4. 通过 Patchstack mVDP、Wordfence 漏洞披露、WPScan 或插件作者进行私下披露。
5. 在任何公开披露之前等待修复。
6. 仅使用 `squadrone disclose` 来记录您自己的披露状态。
请勿将 Squadrone 指向您不拥有或未获得明确书面测试许可的基础设施。标签:AI智能体, CISA项目, WordPress, 无服务器架构, 请求拦截, 逆向工具