security-audit
一个面向编码 Agent 的技能,能把你的 Agent 变成一名安全审计员。它通过编排多个相互隔离的 Agent,依次完成侦察摸底、基于覆盖率的漏洞挖掘、候选漏洞验证、结构化输出、独立记录核验,以及不偏不倚的目标中立报告。
这个技能正是 Cloudflare 漏洞发现框架的前身,详见《构建你自己的漏洞检测框架》(英文)。后来那个框架发展成了一个多阶段、覆盖全集群的系统;而本技能就是它最初的单仓库起点。
能做什么
本技能以六个阶段执行结构化审计:
- 侦察(Reconnaissance)——在
architecture.md和coverage-ledger.json中梳理架构、信任边界、输入面、已有证据和确定性覆盖率。 - 基于覆盖率的漏洞挖掘(Coverage-led hunting)——从覆盖率清单中分配任务给相互隔离的猎手 Agent,记录它们的检查项,并用覆盖率评审员找出覆盖缺口。
- 候选漏洞验证(Candidate validation)——将每一个唯一的候选漏洞交给一个全新的验证者 Agent,尝试证伪它。
- 结构化输出(Structured output)——将
confirmed(已确认)、needs_validation(待验证)和rejected(已驳回)三类记录写入findings.json,并按report-schema.json进行校验。 - 独立记录核验(Independent record verification)——由全新的 Agent 核验最终的溯源声明。重大替换操作会再交给另一名独立验证者复核。
- 目标中立报告(Target-neutral reporting)——基于已核验的记录和覆盖率清单,生成
REPORT.md、FINDINGS-DETAIL.md和NEEDS-VALIDATION.md。
主 Agent 在创建覆盖率清单后以及此后每次更新清单时,都会运行 validate-coverage-ledger.cjs。在第 4 阶段会运行 validate-findings.cjs,在第 5 阶段每次替换记录后也会再次运行。
三种判定结果含义不同:confirmed 拥有完整的源码溯源链和可界定的观测结果;needs_validation 存在一项明确的未核实事实,且不标注严重等级;rejected 则记录了一个已被证伪的候选漏洞。
针对同一个仓库的多次运行是累加式的。本技能会利用之前的覆盖率清单和发现记录来瞄准缺口、重新验证变更的源码,并沿用当前源码下依然有效的证据——但不会把过期或未解决的工作算作已覆盖。
文件说明
| 文件 | 用途 |
|---|---|
SKILL.md | 安装配置、核心原则、平台术语、工作流总览,以及审计反模式 |
RECONNAISSANCE.md | 第 1 阶段侦察提示词与综合梳理说明 |
HUNTING.md | 第 2 阶段编排方法、漏洞挖掘方法论与验证规则 |
ATTACK-CLASSES.md | 核心、通配与常见攻击类型的提示词 |
MEMORY-SAFETY-AND-BINARY.md | 面向原生代码目标的内存安全、二进制与内核漏洞挖掘分类 |
AI-AND-LLM.md | 面向 LLM 类目标的提示注入、Agent/工具与输出处理漏洞挖掘分类 |
WEB-PROTOCOL-AND-AUTH.md | 面向 HTTP 协议与认证目标的请求构造、缓存与认证协议漏洞挖掘分类 |
CLIENT-SIDE.md | 面向客户端/浏览器目标的 DOM 注入、消息信任、UI 重定向与原型污染漏洞挖掘分类 |
SUPPLY-CHAIN-AND-RELEASE.md | 依赖、CI、发布、签名、更新、插件与扩展漏洞挖掘分类 |
CLOUD-AND-DEPLOYMENT.md | IAM、基础设施即代码、容器、Serverless、入口与运行时配置漏洞挖掘分类 |
PROTOCOLS-RPC-AND-MESSAGING.md | RPC、序列化、队列、代理、Webhook 与流式协议漏洞挖掘分类 |
RESOURCE-EXHAUSTION-AND-AVAILABILITY.md | 共享资源、配额、队列、工作节点与运营开销漏洞挖掘分类 |
DATA-ISOLATION-AND-LIFECYCLE.md | 租户隔离、缓存、搜索、导出、备份、迁移、删除与恢复漏洞挖掘分类 |
DESKTOP-MOBILE-AND-LOCAL-IPC.md | 原生应用、深度链接、WebView、导出组件、辅助工具、守护进程与本地 IPC 漏洞挖掘分类 |
VALIDATION-AND-REPORTING.md | 第 3–6 阶段:候选验证、结构化输出、记录核验与报告生成 |
report-schema.json | findings.json 中三种判定结果共用的 JSON Schema |
validate-findings.cjs | 第 4、5 阶段用于校验 findings.json 的零依赖校验器 |
validate-findings.test.cjs | 漏洞发现校验器的测试用例,以及与生成方兼容的样例检查 |
validate-coverage-ledger.cjs | 第 1–5 阶段用于校验 coverage-ledger.json 的零依赖校验器 |
validate-coverage-ledger.test.cjs | 覆盖率清单校验器的测试用例 |
安装
使用 Skills CLI 安装本技能:
npx skills add https://github.com/cloudflare/security-audit-skill \
--skill security-audit
使用 --global 进行用户级安装:
npx skills add https://github.com/cloudflare/security-audit-skill \
--skill security-audit \
--global
运行 npx skills --help 可查看 Agent 选择与非交互式选项。
使用方法
在你要审计的代码库中启动编码 Agent(或让 Agent 指向该代码库),然后让它执行安全审计:
security audit this codebase
find security vulnerabilities in ./src
do a security review, output to ~/audits/my-project
当请求匹配本技能的触发词(如 security audit、find vulnerabilities、pen-test the code 等)时,技能会自动激活。直接的代码库审计或渗透测试请求会使用完整审计模式。安全问题咨询和聚焦性漏洞排查则使用指导模式,除非你明确要求生成报告产物。在完整审计模式下,如果没有指定输出目录,默认会输出到 ~/security-audit-skill/<仓库名>/run-<N>。只有当你显式选择了一个被版本控制忽略的目录时,工作流才会在目标仓库内部写入文件。
环境要求
- 一个编码 Agent,其模型需支持工具调用和并行子 Agent
- Node.js,用于运行零依赖的漏洞发现和覆盖率清单校验器
- 操作系统层面强制隔离的沙箱,用于运行由目标代码控制的构建、测试、进程、浏览器、模拟器、模糊测试器和测试样例。沙箱必须禁用外部网络、使用经过清理的白名单环境、强制执行资源限制,并且只允许向分配的临时路径写入。如果没有这些控制措施,工作流会将候选漏洞保持为
needs_validation状态,而不会执行目标代码。
设计原则
- 只确认已确立的边界突破。 将基于源码但被阻断的线索保留为
needs_validation,并标注其确切的未核实事实。 - 对抗式验证。 检查漏洞的 Agent 永远不能是发现它的那个 Agent。
- 严重程度必须对应实际影响。 严重程度 = 可能性 × 影响,而不是偏离了某张检查清单就算漏洞。
- 深度防御的缺口不等于漏洞。 如果 A 层已经能阻止攻击,那么 B 层的缺失只是加固建议,不是漏洞。
- 多次运行可提升覆盖率。 在我们的测试运行中,单次运行大约只能发现反复运行总漏洞数的一半。
联系方式
有问题、反馈,或想交流 AI 驱动安全工具的心得:security-ai-research@cloudflare.com
许可证
MIT —— 详见 LICENSE。

有疑问、有建议、想分享自己的实践?欢迎加入我们的微信群交流


