Cloudflare 开源 security-audit-skill:AI 编码 Agent 的漏洞审计六阶段与五道反幻觉防线

cloudflare/security-audit-skill 仓库页

Cloudflare 把自家 AI 漏洞挖掘流程的起点开源了。这个名为 security-audit-skill 的仓库是一个编码 Agent 技能包,装上之后,Claude Code、Codex 一类的编码 Agent 可以按固定流程对代码库做安全审计。据 GitHub Trending 数据,仓库目前以日增 3000+ star 的速度排在全站第一,总星数超过 1.2 万。它受关注的原因集中在工程机制上:AI 审计最常见的毛病是产出一堆看似专业、经不起复核的误报,这个 skill 用一整套流程来堵住这类问题。

这个 skill 做什么

安装只需一行命令:

bash
npx skills add https://github.com/cloudflare/security-audit-skill \
  --skill security-audit

对着 Agent 说"security audit this codebase"或"find security vulnerabilities in ./src",完整审计流程就会启动。整个流程分六个阶段:

阶段做的事
Reconnaissance梳理架构、信任边界、输入面,写出 architecture.md 和覆盖台账 coverage-ledger.json
Coverage-led hunting按台账单元派出相互隔离的 Hunter,逐类攻击尝试打破代码,记录每项检查
Candidate validation每个候选漏洞交给一个全新的 verifier,它的任务是证伪
Structured outputconfirmedneeds_validationrejected 三种记录写入 findings.json,用 JSON Schema 机械校验
Independent verification再派新 Agent 对照源码复核每条结论
Reporting生成 REPORT.mdFINDINGS-DETAIL.mdNEEDS-VALIDATION.md

三种结论的界限划分得很细:confirmed 必须有完整的源码追溯和有界的观察结果;needs_validation 写明具体卡在哪一个未决事实,不给严重级别;rejected 记录已被证伪的候选。漏洞没有实锤之前,流程宁可把它挂在待验证列表里。

skill 还区分两种模式:日常安全问答走 guidance 模式,只调用相关章节,不会扫全库建目录;只有明确要求"完整审计"或"渗透测试"时才进入 full audit 模式跑完六阶段。输出目录默认在 ~/security-audit-skill/<repo>/run-<N>,除非显式指定一个版本控制忽略的路径,流程不往目标仓库里写文件。

五道反幻觉防线

AI 找漏洞的可靠性问题,Cloudflare 在博客里说得很具体:Agent 会改源码让自己的 exploit 跑通,然后"发现"这个漏洞;会写同义反复的测试,比如"exec() 能执行东西,所以是严重漏洞";会构造能运行但证明不了任何东西的 exploit,因为它背后的威胁模型是错的。security-audit-skill 针对这些问题设了五道防线。

第一道:生成与验证物理隔离。 发现漏洞的 Agent 永远不给自己产出的结论打分。verifier 的唯一职责是证伪 Hunter 的理论,而且它不能自己提交 findings。官方的原则写成了硬规则:"检查某个 finding 的 Agent 绝不能是发现它的那个 Agent"。

第二道:威胁模型前置。 Hunter 想提交漏洞,必须先声明攻击者是谁、漏洞跨越了哪条信任边界、打破了什么假设,输出 schema 的字段顺序强制了这一点。没有具体受影响主体、资源或安全后果的候选,不能标记为 confirmed。这一条直接消灭了"如果用户有数据库写权限,就能写数据库"这类空洞发现。

第三道:PoC 锁定原始代码。 每个 confirmed finding 必须附带一个针对未改动原始代码库可运行的测试。Agent 没法靠改源码让 exploit 成立,因为测试跑在原始代码上。每个 confirmed finding 还必须附带一个建议补丁,最终进入人工审查队列的是验证过的漏洞、可运行的测试和可用的 git diff 三件套。

第四道:确定性代码把关。 引用的文件路径是否存在、补丁和测试能否正确解析,这些检查由普通代码完成,不经过模型。两个零依赖校验器 validate-findings.cjsvalidate-coverage-ledger.cjs 在流程中的多个节点反复运行。

第五道:沙箱强约束。 目标代码的构建、测试、执行只能发生在 OS 级沙箱里:断外网、空白环境加白名单变量、只能写入分配的 scratch/ 目录、CPU/内存/进程/时长全部限额。任何一项控制无法落实,流程不执行目标代码,改报 needs_validation 并附上安全验证计划。源码检查本身保持只读。

从单个 skill 到舰队扫描器

这个 skill 是 Cloudflare 内部漏洞挖掘系统的种子。官方博客披露了它的进化路径:从一个约 450 行的单仓库 skill 出发,六周后扩成覆盖 128 个仓库的舰队扫描器。系统分成两部分:漏洞发现侧叫 VDH,验证与修复侧叫 VVS,两边使用不同供应商的模型,让 B 模型专职挑刺 A 模型的假设。

VDH 内部有八个阶段,其中 Gapfill、Dedup、Trace、Feedback 四个阶段与 Hunt 构成持续的生产者-消费者循环:

阶段职责
Recon3 个并行子 Agent 写架构文档,现场发明仓库专属的攻击类别
Hunt按攻击类执行,可分裂 sibling Agent(约占任务量 9%,随模型浮动)
Validate两段式:普通代码先做机械检查,再由隔离 Agent 尝试证伪
Gapfill给覆盖不足的"区域×攻击类"格子补发新任务
Dedup确定性代码加 Agent 按根因合并重叠发现
Trace走依赖图,把 hunt 任务注入每个消费方仓库
Feedback根据验证失败、浅层运行、重复漏报改写后续 prompt
Report纯脚本渲染报告,不占用模型

工程层面有几个细节值得记录:每个 Agent 的上下文用量控制在窗口的 25% 以下,防止模型开始幻觉;全部状态外置到一个 SQLite 数据库,以 run_idrepostage 为键,任何阶段崩溃后只损失正在执行的那个任务;Hunter 需要 FreeBSD 虚拟机这类外部依赖时,往一个叫 wishlist 的中央清单写请求,人类补上依赖后系统自动重跑任务。wishlist 上线以来被写了 25472 次,是整个系统使用率最高的工具;对比之下,团队接入的静态分析工具 Semgrep 在一个月的运行里被 Hunter 调用次数为零。Cloudflare 把这条写成了经验:看 Agent 实际伸手拿什么,而不是预设它们需要什么。

漏斗数据来自博客发布时点:VDH 产出 20799 个原始候选,12057 个通过独立验证;汇入 VVS 后总量 13841,Dedup 折叠掉 5442 个重复项,1154 个被归入错仓库或低风险回收,最终 7245 个可执行的发现交给工程团队。对单个标准仓库(约 3 万行代码),一轮完整发现需要 3-4 小时,产出约 100 个候选,压缩成 80 个高保真漏洞;自动修复环节平均 5 分钟出一个补丁,从发现到开出修复 PR 全程约 14 小时。其中关键漏洞平均 10 个,走人工快审,5 天内进入生产修复,其余在 15-20 天窗口滚动上线。质量趋势随迭代改善:初始验证拒绝率从 40% 降到 11%,高完整性发现的占比从 35% 升到 58%。

边界也交代得很清楚:Cloudflare 不声称系统的假阴性率,因为代码库没有全量漏洞标注集,任何召回率数字都是推测;单次运行大约只能找到反复运行累计结果的一半,所以 skill 被设计成多次运行可叠加,会读取历史台账和 findings,只补空隙、复验变更过的代码;自动修复器是整个系统里最年轻最慢的环节,永远不自主合并代码,人工审核是不可绕过的门槛。harness 本体(调度器、数据库、舰队编排)没有开源,Cloudflare 表示希望后续放出,目前开源的是它演化起点的那个 skill。

上手成本与边界

自己跑起来有三个前置条件:一个支持工具调用和并行子 Agent 的编码模型、Node.js(运行两个零依赖校验器)、一个 OS 级沙箱。沙箱条件不达标时流程会自动降级为 needs_validation,不会硬跑目标代码。多次审计同一个仓库是叠加式的:前一轮的台账和 findings 会被读进来做起点,已确认且源码未变的结论可以沿用,变更过的部分自动生成复验任务。

仓库采用 MIT 协议,配套文件按攻击面拆分:内存安全与二进制、AI 与 LLM(提示注入、Agent 工具滥用)、Web 协议与认证、客户端 DOM、供应链与发布、云与部署、数据隔离、资源耗尽等十几个专项攻击类文件,每个都带各自的 hunting 方法论。

对做 Agent 应用的开发者,这套设计里有三条可以直接迁移的原则:产出物必须能被确定性代码机械验证,模型只负责生成不负责自我评分;生成角色与验证角色物理隔离,验证方以证伪为职责;会话状态外置到可恢复存储,把模型当无状态计算引擎用。这三条同样适用于数据处理流水线、自动化测试生成、爬虫调度这一类长时运行的 Agent 工作流。Cloudflare 还留下了一个选型参考:Agent 实际高频使用的工具与工程师预想的专业工具可能完全错位,给系统配工具前先看真实调用数据。

来源:Cloudflare Blog - Build your own vulnerability harnessGitHub - cloudflare/security-audit-skill