Laucked-Security/claude-oswe
GitHub: Laucked-Security/claude-oswe
一款 Claude Code 白盒安全审计插件,通过追踪 source→sink 数据流链并独立验证,自动发现和报告 Web 应用中可导致未授权 RCE 的高危漏洞链。
Stars: 1 | Forks: 0
# 🛡️ claude-oswe
### Claude Code 的白盒安全审计插件
**[Laucked Security](https://github.com/Laucked-Security) 项目**
[](https://github.com/Laucked-Security/claude-oswe/actions/workflows/ci.yml)
[](LICENSE)




**从你的编辑器中运行深度的、OSWE 风格的白盒 Web 应用安全审计。** 在你有权测试的 repo 中输入 `/oswe:audit`;该插件会追踪从 **source → sink** 的攻击者输入,将发现的问题链接以实现 **未经身份验证的 RCE**,在证明合约下**验证**每个链,并撰写一份有证据支撑的报告(Markdown **+** 一份独立完整的可视化 HTML 报告,你可以将其保存为 PDF)。
## 它解决的问题
询问 LLM “这段代码中有漏洞吗?”会给你一堵充满自信但全是不确定性的墙:对安全代码的误报,没有漏洞利用链,没有证明,没有可复现性。那是噪音,而不是审计。`oswe` 的构建初衷就是**不这样做**:
- **关键之处的确定性。** 严重性、去重以及“这是否是一个严重的未授权 RCE?”的决策**不**依赖于模型——它们在经过测试的、无依赖的 Node 辅助函数中运行,并有 **120 个单元测试**。模型负责*发现*;辅助函数负责*决策*。
- **会反驳的验证器。** 每个候选链和高严重性发现都会被独立的验证器重新检查,该验证器可以**降级或拒绝**——它不会盲目给分析器盖章。
- **基于 Schema 的 I/O。** 每个 agent 的响应在被信任之前,都会根据 JSON Schema 进行验证;格式错误的响应会被拒绝并重新运行,绝不会静默地用于捏造数据。
- **低噪音,经得起检验。** 在干净、真实的 [Flask 教程](docs/examples/python-safe.md)中,它报告了 **0 个可利用的发现**。在真实的易受攻击代码(OWASP NodeGoat)上,它找到并验证了一个真实的 RCE 链。请参阅[在真实代码上得到验证](#proven-on-real-code)。
这是一个用于发现和修复 Bug 的 **OSWE 风格审计助手**——**不是**渗透测试,也不是安全保证。请参阅[诚实的局限性](#honest-limits)。
## 安装
要求 **Node.js ≥ 20**(验证器和测试以此为目标;如果没有它,审计会提前中止)。
```
# 使用从本地 checkout 加载的 plugin 运行 Claude Code:
git clone https://github.com/Laucked-Security/claude-oswe.git
claude --plugin-dir ./claude-oswe
```
就这样——*使用*它不需要 `npm install`。运行时验证器作为一个独立完整、零依赖的文件被提交(AJV 是一个仅用于**开发**的工具,用于重新生成它们)。
## 用法
```
/oswe:audit # audit the whole project
/oswe:audit src/api # restrict to a sub-path (kept inside the project root)
```
审计**绝不自动运行**(`disable-model-invocation: true`)——它仅在明确的命令触发时运行。带有时间戳的报告会被写入 `.oswe/reports/oswe-report-YYYY-MM-DD-HHMM.{md,html}`。
### 运行示例(已精简)
```
/oswe:audit test-fixtures/python/vulnerable
Verdict: unauthenticated RCE — Critical (strong static proof)
CHAIN-1 POST /login { "is_admin": true } → session["admin"] mass-assignment (OSWE-1)
└─► /render?tpl={{ … }} → Jinja2 SSTI via render_template_string (OSWE-2) → RCE
entry: unauthenticated · 2 transitions, both accepted
Findings: 2 High (accepted) · Coverage: 2/2 partitions · no gaps
Report: .oswe/reports/oswe-report-2026-06-16-1600.md (+ .html)
```
📄 **完整的报告示例**(真实输出,公开的测试固件,无秘密信息):[`docs/examples/`](docs/examples/) —
[Python](docs/examples/python-vulnerable.md) · [Java](docs/examples/java-vulnerable.md) ·
[.NET](docs/examples/dotnet-vulnerable.md) · [一个干净的“安全”运行结果](docs/examples/python-safe.md)。
## 支持的技术栈
| 技术栈 | 框架 | 检测到的示例 sink 类 |
|---|---|---|
| **PHP** | Laravel, Symfony, vanilla | type-juggling/magic-hash 验证绕过、无限制上传、SQLi、命令注入、PHP 对象注入 |
| **Node.js** | Express, Nest | NoSQL 操作符注入、SSJI (`eval`)、原型链污染、命令注入、SSRF |
| **Python** | Flask, Django | SSTI (`render_template_string`)、`pickle`/`yaml.load` 反序列化、批量赋值、SQLi |
| **Java** | Spring | SpEL/OGNL 注入、Java 反序列化 gadget 链、命令注入、XXE |
| **.NET** | ASP.NET (Core & 经典版) | 伪造/未签名的 auth cookie、`BinaryFormatter` 反序列化、命令注入、XXE |
每个技术栈在 [`skills/audit/references/`](skills/audit/references/) 下都有一个精选的 source→sink 参考。多语言 repo 会加载所有相关的参考,并按技术栈对审计进行划分。
## 工作原理
```
recon → partition (by module / framework / auth boundary)
→ analyze (parallel read-only oswe-analyzer subagents, max 4)
→ aggregate/dedupe (deterministic Node helper, stable OSWE-N ids)
→ build chains → verify (independent oswe-verifier, bound batches)
→ apply verdicts (deterministic Critical gating) → report (.md + .html)
```
- **只读 agent。** 分析器/验证器子 agent 无法修改你的代码。
- **受限范围。** 路径参数由经过测试的约束辅助函数进行规范化,该函数会拒绝任何逃离项目根目录的内容(`../`、符号链接、兄弟前缀欺骗)。
- **关键性门控。** 只有当验证器端到端接受该链、每个成员发现都被接受、入口是 `unauthenticated`(未授权)且影响是 `unauth-rce`(未授权 RCE)时,该链才是 `Critical`(严重)的。
- **秘密永远不会外泄。** 发现的秘密值会被 `[REDACTED]`(脱敏);仅引用 `file:line`。中间的 `.oswe/tmp/` 文件会在开始、结束或任何中止时被清除。
七个 JSON Schema 位于 [`skills/audit/schemas/`](skills/audit/schemas/);确定性辅助函数及其测试位于 [`skills/audit/scripts/`](skills/audit/scripts/)。
## 在真实代码上得到验证
针对 [OWASP NodeGoat](https://github.com/OWASP/NodeGoat) 运行——这是一个真实的多模块 Express + MongoDB 应用,而不是玩具固件——`/oswe:audit` 找到并**验证**了一条端到端的 RCE 链:
```
Verdict: effectively-unauthenticated RCE — Critical (strong static proof)
CHAIN-1 POST /signup (open self-registration → instant authenticated session)
└─► eval(req.body.preTax) on POST /contributions → server-side RCE
24 findings across 6 partitions · 7 High accepted
```
是什么让这个结果值得信赖而不是噪音:
- **验证器降级了 4 个过于激进的 `High`(高危)发现**(例如,一个被 `marked sanitize:true` 中和的“存储型 XSS”),而不是接受它们;
- **schema 网关拒绝了一个格式错误的分析器响应**,并重新运行了该分区一次——没有为了填补空白而捏造数据;
- 标题链被报告为**“实际上是未经验证的”**,并说明了开放注册的注意事项,没有夸大其词。
对照控制组:针对干净的 [Flask 教程 `flaskr`](docs/examples/python-safe.md),同一个 pipeline 报告了 **0 个可利用的发现**(一个 Info 级别的安全加固建议,没有被夸大)。在真实的易受攻击代码上找到真实的链;在干净的代码上保持安静。
## 诚实的局限性
- **OSWE 风格的助手,而不是渗透测试。** 这是**静态**白盒源代码分析。“已验证”= **强有力的静态证明**(在证明合约下的 source→sink),**而不是**在运行的目标上发起的实时漏洞利用。没有动态执行、模糊测试或运行时确认。
- **“没有通往 RCE 的路径” ≠ 安全。** 它的意思是*在分析的覆盖范围内没有发现*。预算受限的分区、不支持的技术栈和跳过的路径会在每份报告的**Coverage(覆盖范围)**部分列出——请仔细阅读。
- **验证器同样具有模型的盲点。** 它是通过严格的合约进行的独立验证,而不是绝对真相。在采取行动之前确认发现;自行对 `not-requested`(未请求)的项目进行分类。
- **范围/规模受限。** 每次审计最多 12 个分区;超大型 monorepo 会出现覆盖盲区(会被报告,绝不隐藏)。依赖/gadget 分析按需读取,并非详尽无遗。
- **五种技术栈**,每种都有一个精选的参考页面——广泛的 sink 覆盖,而不是详尽无遗的 SAST 规则集。请将输出视为**带有证据的高质量线索**,交由工程师进行确认和修复。
## 开发
运行时验证器 [`skills/audit/scripts/validators.mjs`](skills/audit/scripts/validators.mjs) 是一个**独立、零运行时依赖**的 ESM 文件(AJV 生成的验证器内联了一个运行时辅助函数)。运行测试套件(仅限 Node ≥ 20,无需安装):
```
( cd skills/audit/scripts && node --test ) # 120 tests
node .github/scripts/check-structure.mjs # stacks / references / fixtures-markers gate
```
在更改任何 schema 后重新生成 `validators.mjs`(AJV 仅用于开发,仅用于生成):
```
( cd skills/audit/scripts && npm install && npm run build && node --test )
```
**CI** ([`.github/workflows/ci.yml`](.github/workflows/ci.yml)) 在 Node 20 和 22 上运行单元测试,运行结构网关,并验证已提交的 `validators.mjs` 与 schema 同步。`claude plugin validate . --strict` 作为发布前的**本地门禁**运行(它需要 Claude Code CLI,而这在 CI 运行器上不可用)。
## 授权与道德
仅出于**防御性**目的,对您拥有或被允许测试的代码进行**已授权**的白盒审查。**切勿**审计不受信任、带有敌意或未经授权的仓库。敌意仓库的注释和字符串会被视为不受信任的数据,绝不会被当作指令执行。有关完整的使用规范以及如何报告插件本身的漏洞,请参阅 [SECURITY.md](SECURITY.md)。
## License
[MIT](LICENSE) © 2026 [Laucked](https://github.com/Laucked-Security)标签:JS文件枚举, MITM代理, 代码安全, 多人体追踪, 大语言模型插件, 安全审计报告, 对称加密, 漏洞枚举, 白盒代码审计, 自动化审计, 自定义脚本, 逆向工具