📌 项目地址:cloudflare/security-audit-skill | ⭐ 6,451 颗星 | 🔧 JavaScript | 📜 未标注
项目地址:cloudflare/security-audit-skill | 6451 星 | JavaScript
先说结论
这个仓库不是又一个“AI 安全扫描器”。它是一套 coding-agent skill:装上之后,你的编码 Agent 变成一个安全审计员。整个审计不是单个模型读一遍代码然后列问题,而是由一个父 Agent 调度多个相互隔离的子 Agent,分六个阶段跑完,每个阶段有固定产物和校验脚本。
来头也不小。Cloudflare 在博客《Build your own vulnerability harness》里描述过他们的漏洞发现系统,那套系统后来长成了覆盖整个机群的多阶段体系。这个仓库就是它最早的单仓库起点。换句话说,这是从生产系统里剥离出来的方法论,6451 星说明很多人认这个账。
它解决什么问题
让 AI 做安全审计,最常见的问题是两个:幻觉(报了一堆不存在的漏洞)和偏袒(发现自己问题的模型,自己确认自己没问题)。这个项目的设计全部围绕这两点展开:
发现者和验证者必须是不同的 Agent。 每个候选漏洞都会交给一个全新的 verifier Agent,它的任务不是确认,而是推翻这个发现。能被证伪的进 rejected,推不翻的才往下走。
结论分三档,定义卡得很死。 confirmed 要求有完整的源码追溯链和有边界的观测结果;needs_validation 必须写明一个确切的未解决事实,而且不给严重级别;rejected 记录被推翻的候选。这就堵住了 AI 审计报告的老毛病:动不动标“高危”,但说不清证据链。
覆盖是记账的。 第一阶段侦察会产出一份 coverage-ledger.json(覆盖率账本),记录哪些代码单元被检查过。后续的 hunting 从账本里分配任务,还有专门的 coverage critic 找遗漏。父 Agent 在账本创建后和每次更新后都跑 validate-coverage-ledger.cjs 校验格式。
六个阶段
- 侦察:绘制架构、信任边界、输入面、既有证据,输出
architecture.md和coverage-ledger.json - 覆盖驱动的狩猎:按账本单元分配隔离的 hunter Agent,记录检查结果,用 critic 找覆盖缺口
- 候选验证:每个候选交给新 Agent 尝试证伪
- 结构化输出:结果写入
findings.json,对照report-schema.json校验(跑validate-findings.cjs) - 独立记录核验:再换一批新 Agent 核验报告里的源码断言,有改动的部分再过一轮独立验证
- 报告生成:产出
REPORT.md、FINDINGS-DETAIL.md、NEEDS-VALIDATION.md
还有一个我觉得很实用的设计:审计是增量的。对同一个仓库跑多次,结果会累加。技能会读取之前的账本和发现,优先补覆盖缺口、重验改过的代码,仍有效的证据直接沿用。过时或没结论的工作不会被当成已完成。这对持续维护的项目很关键,否则每次全量重扫既浪费又 noisy。
仓库里有什么
技能本体是一组 Markdown 文件,本质上是提示词和方法论,按攻击面分类:
| 文件 | 内容 |
|---|---|
SKILL.md |
安装、核心原则、平台术语、流程概览、审计反模式 |
RECONNAISSANCE.md |
第一阶段侦察提示词 |
HUNTING.md |
第二阶段编排、狩猎方法论、验证规则 |
ATTACK-CLASSES.md |
核心、通配、常见攻击提示词 |
MEMORY-SAFETY-AND-BINARY.md |
内存安全、二进制、内核攻击类(原生目标) |
AI-AND-LLM.md |
提示注入、Agent/工具滥用、输出处理(LLM 应用) |
WEB-PROTOCOL-AND-AUTH.md |
HTTP 请求走私、缓存、认证协议攻击类 |
CLIENT-SIDE.md |
DOM 注入、消息信任、UI 伪装、原型污染 |
覆盖面比一般的 Web 扫描器宽:C/C++ 原生代码、内核模块、LLM 集成应用都在射程内。
一点提醒
README 没有给出具体的安装命令和调用示例。作为 coding-agent skill,通用做法是把它作为技能装进你用的编码 Agent,细节要参考官方文档和 SKILL.md。所以这个项目更适合已经在用 Agent 工具、并且愿意读提示词源码的人,不是开箱即用的黑盒工具。
但也正因为它是纯 Markdown,每个阶段的编排逻辑、验证规则、攻击类提示词都摊开给你看。就算不直接用,把它当成一份“如何组织 AI 做安全审计”的参考实现来读,也值回票价。核心思路可以迁移到任何需要 AI 批量产出可靠结论的场景:先记账覆盖,再独立证伪,最后结构化落盘。