用过 AI 写代码的人,多半都撞过同一堵墙:让编码助手顺手”看一眼安全”,它扫两眼,回你一段像模像样的话——”这里可能存在 SQL 注入风险,建议改用参数化查询”。听上去没错,可它没说清是哪个接口、谁能触发、真被利用会丢什么。Cloudflare 开源的 security-audit 技能就是冲着这堵墙来的,GitHub 上已经攒到 2.99 万 Star,120 天从零涨到这个数。我在隔离沙箱里把它逐文件翻完,撞见一个别的评测少见的反差:这个技能挂的招牌是”安全审计”,仓库里却没有任何一行代码负责找漏洞。
它不是扫描器,是给 AI 定的审计作业规范
先把它是什么说清楚。市面上的安全工具分两类:一类是扫描器,自己跑起来找漏洞;另一类是规范,教别的 AI 怎么找。security-audit 属于第二类,而且属于得很彻底——整份仓库 15 个 Markdown 文件、18.3 万字节,全是写给人(准确的说是写给模型)看的流程说明书。
一句话定位:给 AI 编码助手(Claude Code、Codex 这类能调工具的助手)装一套六步作业规范,逼它把”我觉得这里有问题”变成”这条证据能溯源、这个结果真跑出来过”。
它的六步是这样走的:侦察(把代码结构和信任边界画出来)→ 按覆盖清单派猎手 → 候选人验证(交给另一个没参与找漏洞的 AI 去证伪)→ 结构化输出 → 独立复核记录 → 出报告。里面有几个反直觉的设计:
- 找漏洞的 AI 和验证漏洞的 AI 必须是两个,且验证方拿到的任务就是”尽力推翻它”。理由写在仓库首页:同一个 AI 既当运动员又当裁判,等于没验。
- 搬运沙箱产物的规矩细到吓人:每一步用文件描述符、不许跟随软链接、不许递归拷贝、每个文件有字节上限。这是给”审计目标自己写文件、想借机逃出沙箱”这种场景上的锁。
- 只认三类结论,判据写在词上,不放水:
| 结论 | 什么情况下才给 | 给不给严重等级 |
|---|---|---|
| confirmed(已确认) | 来源能完整溯源,且有真跑出来的结果 | 给 |
| needs_validation(待验证) | 有一个具体的、卡住的外部事实没拿到 | 不给 |
| rejected(已证伪) | 候选被独立验证方推翻 | 不给 |
换句话说,它不承诺”帮你找到漏洞”,它承诺”让 AI 找漏洞的每一步都可被追查”。这两者的差别,就是这份仓库全部的设计动机。
我把它的测试全跑了,65 条一次通过
评测安全审计工具最尴尬的地方是:你没法用它审自己证明它行。所以我改成核两件能核的事——它自己带的测试,和它那两个校验脚本的边界行为。
先看仓库里唯一有代码的部分。整个仓库只有 4 个 .cjs 文件,其中 2 个是校验器,另 2 个是给校验器写的测试:
| 文件 | 大小 | 干什么 |
|---|---|---|
validate-findings.cjs |
28,806 字节 | 校验最终结论文件合不合规 |
validate-coverage-ledger.cjs |
33,522 字节 | 校验覆盖清单的每一步有没有交代 |
validate-findings.test.cjs |
26,384 字节 | 上一条校验器的测试 |
validate-coverage-ledger.test.cjs |
28,483 字节 | 覆盖清单校验器的测试 |
两个校验器加起来 62.3 KB,零第三方依赖——仓库里连一份”依赖清单”(package.json)都没有,只用 Node 自带模块。我在沙箱里跑它自带的测试:65 条断言,65 条通过,0 失败 0 跳过,4.08 秒。拆开看是 34 条管结论校验、31 条管覆盖清单校验。
这个数字需要配一句解释:65 条测试,没有一条在测”能不能找到漏洞”。它们测的全是另一件事——报告格式的守门人够不够狠。我按这个方向自己加了几组边界输入去撞它:
- 传一个空结论表
[]→ 通过,退出码 0(空报告合法,不许硬编一条充数)
- 传一个对象而不是列表 → 拦下,退出码 1
- 传一段截断的 JSON → 拦下,退出码 1,只印一句”语法错误”,不吐堆栈
- 传一个不存在的文件名 → 拦下,退出码 1,同样不吐堆栈
四个例子的意义在于最后那条:失败的时候不把调用方的输入原样回显出来。听起来是小事,做安全的人知道这不是——审计报告里如果混进一串控制字符,能把终端骗过去,所以它连诊断信息都做转义。这条规矩在它的测试里占了整整一类。
覆盖面这一侧它也下了本钱:主规范之外配了 10 个”攻击面分类”文件,从内存安全、AI 大模型的提示注入(也就是往给模型的指令里夹带私货)、网页协议与登录认证,一路到供应链、云部署、桌面端本地进程间通信。15 个 Markdown 里一共 106 个小节标题。这份分类表的价值不在深,在于”摊得开”——它逼模型在动手前先回答”我审的是哪一类目标、该类里有哪些套路”,而不是笼统地”审一下”。
有两处我如实写下来,不替它圆:
第一处是仓库自己承认的短板。README 里有一句原话:在他们的测试里,单跑一轮大约只找到多轮累计漏洞数量的一半。翻译成普通话——这工具跑一次是不够用的,得反复跑、比对几次结果。这句话敢于写在首页,比一堆”行业领先”可信,但也说明它现在还不是”一把过”的成熟工具。
第二处是节奏。最后一条提交停在 2026 年 9 月 14 日,到今天我写这篇时已经 32 天没动;全部历史只有 14 次提交、5 个合并的 PR,作者高度集中在一个人身上(literally-dan / Dan Jones)。对一个 3 万 Star 的项目,这个维护密度偏低——它是”Cloudflare 放出来的一份方法论”,不是”一个每周都在长的基础设施”。这两者的用法完全不同,后面会说到。
和同类比,它的位置在哪
把它和常见做法摆一起,位置就清楚了:
| 对比对象 | 谁在找漏洞 | 要不要独立复核 | 证据形态 |
|---|---|---|---|
| 静态扫描器(如代码扫描工具) | 工具自己 | 不需要 | 规则命中列表 |
| 直接问 AI”审一下” | 同一个 AI | 没有 | 一段自然语言 |
| security-audit 技能 | AI 去做,但按固定六步 | 强制,且验证方必须独立 | 结构化记录 + 可溯源证据 |
差别集中在中间那一列。”直接问 AI”的问题从来不是它不够聪明,而是它说”有风险”时,你分不清那是结论还是它在迎合你。这个技能的做法是:把”下结论”这件事本身立成一道有格式、有复核、有证伪的流程。
适合谁用:手上有一份想认真过一遍安全的中小型代码库,团队里有人能读懂 AI 给出的证据链,并且愿意接受”跑一轮不够、要跑几轮”这个前提。也适合只想学一套审计方法论、不打算直接用它的人。
不适合谁用:指望装上一个技能就自动把漏洞扫出来的人。这仓库里没有一个字节是扫描逻辑,找不到漏洞不是它坏了,是它压根不干这事。另外一个前提是它要求执行环境有硬沙箱——真要动手复现目标代码的行为,得有个能断网、能限内存、只让往指定目录写的隔离环境;没有这个环境,规范自己的要求是:不许跑目标代码,把线索标成”待验证”。这个自我约束是优点,但也意味着实际能挖多深,取决于你手里的沙箱。
我的判断
这是一个人格很完整的安全审计技能,但不是一个人能拿来就用的工具。它的价值在流程:六步怎么分、谁去找谁去验、什么才配叫”已确认”、沙箱里怎么搬文件才不出事——这些规矩是 Cloudflare 从自己的漏洞发现流水线里抽出来的,有真实来源,不是纸上谈兵。2.99 万 Star 和 120 天的涨速,也说明这套方法论踩中了大家的痛点。
但它把力气全花在”规范”上,代价就是”能力”那半边是空的:没有扫描逻辑,65 条测试一条都不碰找漏洞本身,32 天没提交,作者一个人扛。所以我的结论是把它放进”值得精读、谨慎依赖”这一档——读它的流程设计,比跑它找漏洞收获更大。
这背后其实是一条更普遍的规律:AI 时代的很多所谓”技能”,真正稀缺的不是让模型变强,而是给模型的行为立规矩、加复核。这套仓库是这个思路里做得比较扎实的一份样本。
关注 AI商业快讯,每天一篇 AI 热点深度解读。
相关阅读: