security-audit-skill
面向 coding agent 的多阶段安全审计 skill,将一次代码审计拆成侦察、覆盖驱动挖掘、候选验证、结构化输出、独立复核、目标无关报告六个阶段,并由多个隔离子 agent 分工执行。亮点是流程约束做得细:发现漏洞的 agent 与验证漏洞的 agent 必须是不同实例,结论严格区分 confirmed / needsvalidation / rejected,findings.json 与 coverage-ledger.json 都配有零依赖校验脚本,多次运行结果可叠加用于补覆盖。它是 Cloudflare 漏洞挖掘 harness 的单仓库起点,要求宿主提供禁用外网的操作系统级沙箱,否则只输出 needsvalidation。MIT 许可。
README
security-audit
一个 coding-agent skill(编码 agent 技能),可将你的 agent 变成安全审计员。它编排相互隔离的 agent,依次完成侦察、以覆盖率为主导的猎取、候选验证、结构化输出、独立记录核验,以及与目标无关的报告生成。
正是这个 skill 孕育了 Cloudflare 的漏洞发现 harness(漏洞发现框架),详见 Build your own vulnerability harness。该 harness 后来发展成一套多阶段、覆盖整个机群的系统;而这个 skill 正是它演化前的单仓库起点。
它的作用
该 skill 以六个阶段运行结构化审计:
- 侦察(Reconnaissance) —— 在
architecture.md和coverage-ledger.json中绘制架构、信任边界、输入面、既有证据以及确定性覆盖率。 - 以覆盖率为主导的猎取(Coverage-led hunting) —— 从 ledger(账本)单元中分配相互隔离的 hunter(猎手),记录它们的检查项,并用 coverage critic(覆盖率评审者)找出缺口。
- 候选验证(Candidate validation) —— 将每个唯一候选交给全新的 verifier(验证者),由其尝试证伪。
- 结构化输出(Structured output) —— 将
confirmed、needs_validation和rejected记录写入findings.json,并依据report-schema.json进行校验。 - 独立记录核验(Independent record verification) —— 由全新的 agent 核验最终的来源声明。实质性替换会交由另一位独立验证者处理。
- 与目标无关的报告(Target-neutral reporting) —— 从已核验的记录和覆盖率 ledger 衍生出
REPORT.md、FINDINGS-DETAIL.md和NEEDS-VALIDATION.md。
父级在创建 ledger 之后、以及后续每次 ledger 更新之后都会运行 validate-coverage-ledger.cjs。在第 4 阶段运行 validate-findings.cjs,并在每次第 5 阶段替换后再次运行。
三类判定彼此区分:confirmed 具有完整的来源追踪和边界明确的观察结果;needs_validation 具有一个确切未解决的事实且不含严重性评级;rejected 记录被证伪的候选。
对同一仓库的多次运行是累加式的。该 skill 会利用此前的 ledger 和 findings 来锁定缺口、重新验证已变更的来源,并沿用当前来源的证据,而不会把陈旧或未解决的工作视为已覆盖。
文件
| 文件 | 用途 |
|---|---|
SKILL.md |
配置、核心原则、平台术语、工作流概览以及审计反模式 |
RECONNAISSANCE.md |
第 1 阶段侦察提示词与综合指令 |
HUNTING.md |
第 2 阶段编排、猎取方法论与验证规则 |
ATTACK-CLASSES.md |
核心、通配以及 obvious-things 攻击提示词 |
MEMORY-SAFETY-AND-BINARY.md |
面向原生目标的内存安全、二进制与内核猎取类别 |
AI-AND-LLM.md |
面向 LLM 支撑目标的 prompt-injection、agent/tool 与输出处理猎取类别 |
WEB-PROTOCOL-AND-AUTH.md |
面向 HTTP 协议与认证目标的 HTTP 请求分帧、缓存与认证协议猎取类别 |
CLIENT-SIDE.md |
面向客户端/浏览器目标的 DOM 注入、消息信任、UI 诱骗(UI-redress)与原型污染猎取类别 |
SUPPLY-CHAIN-AND-RELEASE.md |
依赖、CI、发布、签名、更新、插件与扩展猎取类别 |
CLOUD-AND-DEPLOYMENT.md |
IAM、基础设施即代码、容器、serverless、入口与运行时配置猎取类别 |
PROTOCOLS-RPC-AND-MESSAGING.md |
RPC、序列化、队列、broker、webhook 与流式协议猎取类别 |
RESOURCE-EXHAUSTION-AND-AVAILABILITY.md |
共享资源、配额、队列、worker 与运营方支出猎取类别 |
DATA-ISOLATION-AND-LIFECYCLE.md |
租户隔离、缓存、搜索、导出、备份、迁移、删除与恢复猎取类别 |
DESKTOP-MOBILE-AND-LOCAL-IPC.md |
原生应用、深链、webview、导出组件、helper、daemon 与本地 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 |
findings 验证器的测试以及生产者兼容的 fixture(测试夹具)检查 |
validate-coverage-ledger.cjs |
在第 1–5 阶段对 coverage-ledger.json 进行零依赖校验的验证器 |
validate-coverage-ledger.test.cjs |
覆盖率 ledger 验证器的测试 |
安装
使用 Skills CLI 安装该 skill:
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 选择与非交互式选项。
用法
在你的 coding 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 等)时,该 skill 会自动激活。直接的代码库审计或渗透测试请求会使用完整审计模式。安全问题和聚焦式漏洞工作则使用 guidance(指导)模式,除非你要求生成报告产物。在完整审计模式下,未指定输出目录时默认为 ~/security-audit-skill/<repo-name>/run-<N>。仅当你显式选择了一个被版本控制忽略的目录时,工作流才会写入目标仓库内部。
环境要求
- 一个具备支持工具调用与并行 sub-agent(子 agent)的模型的 coding agent
- Node.js,用于零依赖的 findings 与覆盖率 ledger 验证器
- 一个由操作系统强制执行的沙箱,用于运行目标代码控制的构建、测试、进程、浏览器、模拟器、fuzzer 和 fixture。它必须禁用外部网络、使用经净化的白名单环境、强制资源限制,并仅允许写入分配的临时路径。若缺少这些控制,工作流会把线索保持为
needs_validation,而不执行目标代码。
设计原则
- 只确认已确证的边界失效。 将有来源依据但受阻的线索保留为
needs_validation,并附带其确切未解决的事实。 - 对抗式验证。 检查某个 finding 的 agent 绝不能是发现它的那个 agent。
- 严重性需要影响支撑。 可能性 × 影响力,而非偏离清单的程度。
- 纵深防御缺口不是漏洞。 如果 A 层能阻止攻击,那么 B 层的缺失只是一条加固建议。
- 多次运行提升覆盖率。 在我们的测试运行中,单次运行发现的漏洞约为重复运行总计发现量的一半。
联系
问题、反馈,或就 AI 驱动的安全工具交流心得:security-ai-research@cloudflare.com
许可证
MIT —— 参见 LICENSE。