pr0f94/Squadrone

GitHub: pr0f94/Squadrone

Squadrone 是一个基于多 Agent 架构的 WordPress 插件漏洞研究工具,通过源码分析、沙箱验证和去重流程生成可直接披露的报告草稿。

Stars: 0 | Forks: 0

Squadrone

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, 无服务器架构, 请求拦截, 逆向工具