flaw0-security/flaw0
GitHub: flaw0-security/flaw0
flaw0 是一个开放、可自托管的 AI 漏洞发现框架,通过对抗性验证和 PoC 沙箱在源代码中自动确认可利用漏洞,降低误报并确保结果可信。
Stars: 0 | Forks: 0
# flaw0
**以 Agent 的速度发现漏洞——抢在攻击者之前。**
一个开放、可自托管的漏洞发现框架。将其指向你的源代码;
它会进行狩猎、对抗性验证,并通过运行中的
概念验证来*证明*可利用的漏洞——使用你自己运行的开放模型,
确保代码永远不会离开你的网络。
[flaw0.com](https://flaw0.com) · [架构](docs/ARCHITECTURE.md) · Apache-2.0
## 为什么会有这个项目
前沿模型在发现漏洞方面已经变得非常出色。这是一把双刃剑:攻击者也能使用和你一样的模型。但是**防御者拥有攻击者所没有的优势——源代码,以及持续且详尽地审查它的自由。** flaw0 将这种优势转化为实际操作:在 CI 中、在每次提交时、在你自己的硬件上运行它,在*防御者*的时间轴上而不是攻击者的时间轴上发现漏洞。
**核心产品是框架本身,而不是模型。** 一个强大的模型如果仅配合简单的“在这个仓库中查找漏洞”提示词是不可靠的:它会模棱两可、产生幻觉,并让你淹没在误报之中。独立的基准测试证明了这一点——同一个模型会根据周围的框架产生数十分 F1 分数的波动。flaw0 就是这样的框架,它的设计初衷是:
- **开放且可自托管。** 可以在 OpenAI 兼容或 ollama endpoint 后面对任何开放模型(GLM、Qwen、Llama 等)运行。你的源代码和发现结果都保留在你的基础设施中。没有 SaaS,没有数据外泄。
- **模型无关。** 框架会弥补模型的不足。较弱的开放模型?框架会提供严谨性——缩小任务范围、对抗性验证,以及客观的概念验证门控——从而确保结果值得信赖。
- **证明驱动。** 没有有效 PoC 的发现根本不算发现。这是抵御误报的最强有力防线。
## 工作原理
```
recon ──▶ hunt ──▶ verify ──▶ prove ──▶ report
│ │ │ │ │
│ │ │ │ └─ SARIF (CI) + Markdown
│ │ │ └─ generate a PoC, run it in a locked-down
│ │ │ Docker sandbox. Fires? confirmed. Doesn't? dropped.
│ │ └─ an adversarial panel whose ONLY job is to REFUTE, across
│ │ distinct lenses (reachability / sanitizer / input-control).
│ │ Majority refute ⇒ discarded.
│ └─ decide if ONE small code region holds ONE exploitable bug class.
│ A forced threat model (who's the attacker, which boundary) + a
│ no-hedging schema keep even a weak model's output usable.
└─ map the attack surface: enumerate source→sink candidates, hand the model
hyper-focused, enclosing-function-sized regions (never the whole repo).
```
三个理念承担了主要工作,也正是它们让 flaw0 不仅仅是一个提示词:
1. **狭窄范围。** 永远不要要求模型大海捞针。它一次只针对一个小的代码区域判断一种漏洞类型。
2. **对抗性验证。** 一个单独的 agent 会对*每个发现提出反驳*。刻意的分歧比告诉一个 agent 要“小心”能消除更多的误报。
3. **客观证明。** “漏洞利用是否真正触发了?”这个问题是通过实际运行来回答的,而不是询问模型有多大把握。这正是让较弱的自托管开放模型保持诚实的方式。
## 快速开始
需要 Python 3.9+、Docker(用于 PoC 沙箱)以及在本地部署的开放模型。
```
# 1. 提供一个开放模型。可以是 OpenAI 兼容的服务器(推荐):
# 例如:在 http://localhost:8000/v1 上通过 vLLM 提供 GLM 5.2
# ...或者使用 ollama:ollama serve && ollama pull glm-4.6
# 2. 安装
pip install -e .
# 3. 扫描。flaw0 会自动检测您的本地 backend。
flaw0 scan ./path/to/repo
# 显式指定 backend/model:
flaw0 scan ./repo --provider openai --base-url http://localhost:8000/v1 --model og-coding
```
输出结果会存放在 `.flaw0/` 目录中:一个用于 CI/代码扫描仪表板的 SARIF 文件,以及一份人类可读的 Markdown 报告,其中包含数据流追踪、威胁模型以及针对每个已确认漏洞的**有效概念验证**。
### 在内置目标上尝试
```
flaw0 scan examples/vuln_app
```
使用 GLM 5.2(在单台机器上自托管)进行的真实运行:
```
recon: 5 hunt task(s) across the attack surface
[1/5] app.py::init_db sql_injection — clear
[2/5] app.py::find_user sql_injection — CONFIRMED by PoC ✅
[3/5] app.py::find_user_safe sql_injection — clear
[4/5] app.py::ping command_injection — CONFIRMED by PoC ✅
[5/5] app.py::load_profile deserialization — CONFIRMED by PoC ✅
done: 5 tasks · 3 candidate(s) · 3 PoC-confirmed
```
通过运行的漏洞利用程序证明了三个真实的 bug;而参数化查询的对照组(`find_user_safe`)和 SQL 常量的情况(`init_db`)被正确地忽略了。
## 负责任的披露,并保持人在回路
flaw0 可以监控热门的开源项目并浮现已确认的漏洞——但它**本身绝不进行任何披露。** 当一个发现被 PoC 确认时,它会通知人类操作员(例如通过 Telegram)以获取批准。披露遵循惯例:首先私下通知维护者,只有在修复程序发布后才会公开细节。自动化的*发现*,由人类主导的*披露*。
使用环境变量(切勿提交到代码库中)配置批准渠道:
```
export FLAW0_TELEGRAM_BOT_TOKEN=... # your bot
export FLAW0_TELEGRAM_CHAT_ID=... # where approval requests go
```
## 配置
所有内容都可以通过环境变量(或 `flaw0 scan` 标志)覆盖:
| 环境变量 | 默认值 | 含义 |
|---------|---------|---------|
| `FLAW0_PROVIDER` | `auto` | `auto` \| `openai` \| `ollama` |
| `FLAW0_MODEL` | *(自动检测)* | 部署的模型 ID |
| `FLAW0_OPENAI_BASE_URL` | `http://localhost:8000/v1` | OpenAI 兼容的 endpoint |
| `FLAW0_OLLAMA_HOST` | `http://localhost:11434` | ollama endpoint |
| `FLAW0_VERIFY_VOTES` | `3` | 每个发现的对抗性反驳者数量 |
| `FLAW0_SANDBOX` | `1` | 设为 `0` 可跳过 PoC 确认 |
| `FLAW0_SANDBOX_IMAGE` | `python:3.11-slim` | 沙箱基础镜像 |
| `FLAW0_MAX_TASKS` | `0` | 限制狩猎任务数量(0 = 无限制) |
## 状态与路线图
Alpha 阶段。目前支持:Python 目标;SQLi / 命令注入 / 代码注入 / 不安全的反序列化 / SSRF / 路径遍历种子;对抗性验证;PoC 沙箱;SARIF + Markdown;Telegram 批准。
下一步:
- 更多语言(JS/TS、Go)和攻击类别(IDOR/authz、SSRF 链)。
- 针对 Web 应用的 endpoint/攻击面枚举(上下文整理可提升召回率)。
- 内置的**基准测试框架**(精确率 / 召回率 / F1 / 每个真阳性成本),针对带标签的语料库进行测试——这正是该领域所缺乏的开放、可复现的评估。
- 并行狩猎、跨文件污点分析以及运行间的覆盖率追踪。
## 贡献
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。要报告 *flaw0 本身*的漏洞,请参阅 [SECURITY.md](SECURITY.md)。
## 许可证
Apache-2.0。使用它来防御任何你有权测试的东西。flaw0 是一款防御性工具——请勿将其指向你无权评估的系统或代码。标签:AI风险缓解, DLL 劫持, DNS 反向解析, LLM Agent, 人工智能, 大语言模型, 用户模式Hook绕过, 自动化安全工具, 请求拦截, 逆向工具