从代码到 CVE —
CyberAI 使用完全指南
面向安全研究者的完整操作手册:从环境搭建到扫描第一个库,从解读结果到提交 CVE 披露。
三步跑起第一次扫描
从零到开始扫描一个 C 库,需要大约 10 分钟。你需要一个智谱 AI 的 API Key。
克隆仓库并安装依赖
下载并解压目标源码
已下载的 15 个目标已在 targets/ 目录,无需重新下载。
运行 Pipeline A 扫描
--max-parallel 8 可以加快速度,但注意 API 并发限制。
项目文件树
了解每个目录和文件的职责,是高效使用本工具的前提。
四阶段漏洞发现流水线
Pipeline A 是 Carlini 方法的工程实现:将每个 C/C++ 源文件切片, 逐段投给 LLM,通过多轮过滤将 97% 误报降到可人工复核的数量。
遍历项目所有 .c/.cpp 文件,计算攻击面评分。 评分因子包括:文件名关键词(decode、parse、read、write、handle 权重最高)、 代码行数、函数数量、已知高危 API 使用情况(memcpy、malloc、sprintf 等)。 评分决定扫描优先级,高风险文件优先送入 Stage 2。
carlini.py 驱动 --max-parallel 个并发 Agent,
每个 Agent 读取约 5,000 字符的代码段(PipelineConfig.token_budget 控制)。
使用 CTF prompt 策略:要求 LLM 用攻击者视角寻找缓冲区溢出、整数溢出、UAF、逻辑错误。
原始输出约含 97% 误报,直接写入 JSONL 文件。
将 Stage 2 的原始 findings 去重合并(同一代码位置的重复 finding 合并为一条)。 按置信度阈值 ≥ 0.80 过滤,低于阈值的 finding 存档但不进入候选池。 输出结构化的候选漏洞列表,每条记录包含文件路径、行号、漏洞类型、置信度。
用另一个独立 LLM 实例(默认同模型,可用 --verify-model 指定不同模型)
对 Stage 3 候选进行交叉验证。
验证器被告知这是一个"二次审核",它不知道之前 LLM 的判断,
这种盲审设计有效减少系统性误判。
通过验证的 finding 标记 verified=true,进入人工复核队列。
命令行接口
安装后通过 cyberai 命令使用,
也可以直接调用 scripts/ 下的专用脚本。
脚本工具
扫描一个新的 C/C++ 库
以 libwebp 1.4.0 为例,演示从零添加新扫描目标的完整流程。
下载并解压源码
将目标源码放入 targets/ 目录。源码目录必须包含 .c/.cpp 文件,可以是未编译的原始源码。
(可选)生成函数级代码切片
如果要使用专用扫描脚本(精确控制优先级),先用 make_extracts.py 将源码切分为函数级片段。
直接用 cyberai scan 则跳过此步。
创建专用扫描脚本(推荐)
复制 scripts/scan_libtiff_t2.py 为模板,
修改 SCANS 列表指定扫描顺序和优先注释,指定输出路径。
运行扫描
分析结果并创建研究目录
扫描完成后,在 research/ 目录下为新目标创建标准结构。
理解输出格式和置信度
扫描结果以 JSON 格式存储。理解每个字段的含义, 是从"看到一堆输出"到"找到真实漏洞"的关键一步。
置信度阈值建议
从候选漏洞到 CVE 披露
确认真实漏洞后,遵循 Google Project Zero 的 90 天协调披露政策。 当前 CAND-008 处于 Day 29,进入追踪阶段。
research/disclosures/mosquitto_CAND-008_*.md
环境变量与模型选择
所有配置通过 .env 文件控制。
复制 .env.example 修改后生效。
| 变量名 | 必填 | 默认值 | 说明 |
|---|---|---|---|
| GLM_API_KEY | 必填 | — | 智谱 AI BigModel API Key,在 bigmodel.cn 申请 |
| ANTHROPIC_API_KEY | 可选 | — | Claude API Key,使用 --model claude-* 时必填 |
| OPENAI_API_KEY | 可选 | — | OpenAI API Key,使用 --model gpt-* 时必填 |
| SCANNER_MAX_PARALLEL | 可选 | 4 | 并发扫描 Agent 数,建议 4-8,受 API 并发限制约束 |
| SCANNER_TOKEN_BUDGET | 可选 | 100000 | 每文件 token 预算,越大越贵但更彻底 |
| DATABASE_URL | 可选 | sqlite+aiosqlite:///./cyberai.db | 结果存储数据库,默认本地 SQLite |
| ALIYUN_* | 可选 | — | 阿里云凭证,使用 ECI 云端扫描时必填 |
支持的模型(--model 参数)
已扫描目标与 CVE 候选状态
截至 2026-05,已扫描 10+ 开源 C/C++ 库,产出 7 个 CVE 候选。
| 目标库 | 版本 | 候选漏洞 | 状态 |
|---|---|---|---|
| Eclipse Mosquitto | 2.0.21 | CAND-008 | ● 披露中 Day 29 |
| libtiff | 4.7.0 | CAND-010 | ● PoC 构建中 |
| libjpeg-turbo | 3.x | CAND-LJT-003/004 | ● ASAN 分析中 |
| libwebp | 1.4.0 | — | ● 扫描进行中 |
| ImageMagick | 7.1.2-19 | CAND-005 | ● 深度分析中 |
| curl | 8.11.0 | 0 | ✓ 已扫描 |
| libpng / expat / freetype | latest | 待审查 | ✓ 已扫描 |
| libssh2 / libxml2 / nginx | latest | 待审查 | ✓ 已扫描 |
| openssl / zlib / sqlite | latest | 待审查 | ✓ 已扫描 |