跳到正文
首页 博客 角色 友联 图库 关于
返回首页

Cloudflare 的安全审计技能:没被独立证明的线索,不许写成漏洞

让 Agent 做安全审计,最常见的失败不是漏了漏洞,而是报了一堆假漏洞。人得逐条去否,几次之后就不再信它了。

Cloudflare 开源的 security-audit 技能,把大部分设计力气花在了这件事上:没被独立证明过的线索,不许写成漏洞。

先说时间线,避免误会:这个仓库最后一次提交是 2026 年 9 月 14 日,约 7.2 万星,不是刚发布的新项目。它是 Cloudflare 那套漏洞挖掘 harness 的种子版本——他们写过博客讲这套 harness 怎么长成全公司规模的多阶段系统,而这个技能是它演化之前的单仓库起点。

六个阶段,一环扣一环

阶段做什么留下什么文件
1. 侦察画架构、找信任边界、列输入面、翻历史证据、标出确定性覆盖范围architecture.md、coverage-ledger.json
2. 按账本狩猎从账本条目派独立的"猎手",记录各自查过什么,再用"覆盖评审员"找缺口覆盖账本持续更新
3. 候选验证每个候选交给全新的验证者,任务是证伪它—
4. 结构化输出按三种判定写记录,并对 report-schema.json 校验findings.json
5. 独立复核新 Agent 复核最终的事实陈述;结论被替换的要再过一遍验证findings 更新
6. 中立报告从已核实的记录和覆盖账本推导报告,不带目标倾向REPORT.md、FINDINGS-DETAIL.md、NEEDS-VALIDATION.md

账本建好之后、以及之后每次更新,父流程都要跑一次 validate-coverage-ledger.cjs;第 4 阶段跑 validate-findings.cjs,第 5 阶段每次替换后再跑一次。两个校验器都是零依赖的 Node 脚本,还各自带测试。

用脚本卡格式这件事看着琐碎,其实是这套流程可信的前提:模型可以编一段漂亮的结论,但编不过 schema 校验。

三种判定,语义完全不同

这是全文最值得抄的设计:

  • confirmed:有完整的来源链,加上有界的、被观察到的结果。两条都要,缺一条就不算。
  • needs_validation:写清一个具体的、尚未解决的事实,并且不给严重度。没定级,就不会被当成漏洞用。
  • rejected:被证伪的候选,留着备查。

很多安全 Agent 的问题就出在没有中间态:要么说"是漏洞",要么不提。有了 needs_validation 这一层,模型不必为了给结论而夸大,人也能看到"哪里还不确定、不确定的是哪件事"。

两条硬规矩

第一,验证者不是发现者。找到问题的 Agent 和判断它是否成立的 Agent 必须是两个,上下文也隔开。这是流程层面的对抗性验证,不靠模型自觉。

第二,严重度必须有影响。按可能性 × 影响算,而不是"偏离了检查清单"就算漏洞。官方还给了一条明确的边界:如果 A 层已经挡住了攻击,那么缺 B 层只是加固建议,不是漏洞。这条能砍掉大量"理论上不安全"的报告。

另外它承认覆盖是累积的:官方在自家测试里说,单次运行大约只能发现重复运行总量的二分之一。所以这个技能被设计成可叠加的——多次跑同一个仓库,会复用之前的账本和结论,把力气放在缺口和改动过的源码上,而不是从零重来。

十个攻击面文件,才是真正的资产

除了流程,仓库里有一批按目标类型分的狩猎提示:内存安全与二进制内核、AI 与 LLM(提示注入、Agent 与工具调用、输出处理)、Web 协议与认证(请求分帧、缓存、认证协议)、客户端(DOM 注入、消息信任、UI 重定向、原型污染)、供应链与发布、云与部署(IAM、IaC、容器、无服务器、入口、运行时配置)、RPC 与消息、资源耗尽与可用性、数据隔离与生命周期、桌面/移动与本地 IPC。

换句话说,它不是"通用安全提示词",而是先把目标归类,再调对应的攻击面清单。这套分类本身,就是从真实漏洞挖掘里攒出来的经验。

一条容易被忽略的硬要求

README 里写得很明确:要跑目标代码(构建、测试、起进程、开浏览器、模拟器、fuzzer),必须有操作系统级沙箱——禁外网、用白名单清洗过的环境、限资源、只允许写指定的临时目录。

没有这些控制呢?流程不会硬着头皮跑,而是把线索保持在 needs_validation,不去执行目标代码。

这条规定其实是在说:审计工具要跑别人的代码,跑之前得先有个笼子。做这类工具时,这往往是最容易省掉、也最不该省的一步。

怎么装

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

加 --global 是用户级安装。装好后在目标仓库里直接说要审计:security audit this codebase、find security vulnerabilities in ./src 这类请求会触发它。默认输出到 ~/security-audit-skill/<repo>/run-<N>,只有你明确指定一个被版本控制忽略的目录时才会写进仓库。MIT 许可。

该信多少

  • 本文读的是仓库 README,没有安装、没有对任何代码库跑过审计。
  • 六个阶段是流程设计,不是效果数据;仓库没给"发现了多少真实漏洞"的公开统计。
  • "单次跑约为重复跑总量的一半"是官方自家测试的说法,没有给样本和方法。
  • 它对模型的工具调用和并行子 Agent 能力有要求;沙箱要求不满足时,效果会打折而不是报错。

一句话判断

这个仓库真正的贡献不是"让 Agent 会找漏洞",而是给 Agent 的结论定了三种不同的可信度,并且要求换一个人来验。安全审计这件事,人做的时候靠的是评审文化和怀疑习惯;它把这些习惯写成了流程和校验脚本。至于它在你自己的代码库上能挖出什么,得跑了才知道——而且第一次跑的数字,按它自己的说法,大概只有一半。


来源

说明:星数与最后提交时间由 GitHub API 于 2026-11-14 读取;本文未运行该技能,内容为官方文档解读。

0%