项目详情

Security Audit Skill

把你的 coding agent 编排成一支对抗式安全审计团队

cloudflare/security-audit-skill MIT Cloudflare 官方 13.9k+ stars 2026-06 开源

分类:安全 · AI Agent Skill · ← 返回汇总

项目速览

一句话定位

不是一个扫描器,是一套把 LLM 审计「流程化、对抗化、可审计」的编排法典

Cloudflare 出品的 coding-agent skill:纯提示词 + 流程工程,把单个 agent 编排成「侦察 → 覆盖驱动狩猎 → 候选验证 → 结构化输出 → 独立复核 → 报告」六阶段流水线。它就是 Cloudflare 全公司级漏洞发现 harness 的单仓起点。适合想把 LLM 安全审计从「随手问问」升级为可复现、可累加、可审计流程的团队。

不是 SAST 扫描器 不是自主渗透框架 零运行时依赖(除两个 .cjs 校验器)
项目速览

核心数据

13.9k
Stars(3 个月)
743
Forks
6
审计阶段
10
攻击域知识文件
3
裁决档位
0
运行时框架依赖

GitHub API 采集于 2026-09-19 · 2026-06-18 创建 · 最近 push 2026-09-14 · 仓库仅 143KB(19 个文件,Markdown 提示词为主)

为什么存在

单 agent 审计的三大失败模式

上下文耗尽 → 浅扫

单 agent 塞不下整个代码库,扫到一半开始糊弄,漏掉跨文件的信任边界。

checklist 幻觉

把「不符合最佳实践」当漏洞报:缺个安全头、没加纵深防御层,全是误报。

自查自证

发现问题的 agent 自己验证自己,倾向于相信自己是对的,无人证伪。

解法:不换更强的模型,而是换流程——把审计拆成隔离角色 + 结构化账本 + 对抗验证,让每个 agent 只干一小段可核查的事。

🔥 核心页

六阶段审计流水线

1 · 侦察 架构 / 信任边界 / 输入面 2 · 覆盖驱动狩猎 隔离猎手按账本单位出动 3 · 候选验证 全新验证者尝试证伪 覆盖评审批评员找缺口 → 派新猎手补洞 4 · 结构化输出 findings.json 过 schema 校验 5 · 独立记录复核 全新 agent 核对最终源码主张 6 · 目标中立报告 REPORT / DETAIL / 待验证 阶段产物(父 agent 独占写) architecture.md coverage-ledger.json findings.json REPORT.md FINDINGS-DETAIL.md NEEDS-VALIDATION.md 每次账本更新后跑校验器 零依赖 Node 校验器兜底:validate-coverage-ledger.cjs(Phase 1 起每次账本更新)· validate-findings.cjs(Phase 4 与每次替换后) 两个校验器均带独立测试文件;不过校验 = 运行不许结束
六阶段主流程 共享产物 校验器闸门 虚线箭头 = 覆盖批评员回补循环
🔥 核心页

对抗式编排:查证者永远不是发现者

Parent(编排者 · 唯一共享文件写入方) run-metadata · coverage-ledger · findings · 报告 猎手 H1(隔离) agents/h1/scratch/ 独立沙箱 只领账本单位 · 只交结构化候选 猎手 H2(隔离) agents/h2/scratch/ 互不可见 攻击域提示词各自加载 猎手 H3(隔离) agents/h3/scratch/ 禁碰源码 预算耗尽 → 标记 incomplete 全新验证者 ≠ 发现该候选 的 agent 覆盖批评员(Coverage Critics) 读账本找未覆盖缺口 → 生成新狩猎单位 派单(按覆盖账本单位) 交回覆盖记录,批评员补洞 每个唯一候选 → 换人来「证伪」
编排层(共享状态唯一写方) 隔离猎手(写隔离 + 预算约束) 对抗验证者 覆盖批评员

写隔离铁律:每个 agent 只能写自己的 scratch/;晋升到共享 artifacts/ 只能由父侧受信代码执行(拒绝 symlink、校验 inode、限额字节),agent 永远摸不到别人的目录。

核心机制

覆盖账本:把「扫过了」变成可核查的账

核心机制

三档裁决:不确定就明说不确定

裁决准入条件严重度进入哪份产物
confirmed 完整源码证据链 + 有界的已观察结果,信任边界失败成立 有(5 档锚点校准) REPORT.md · FINDINGS-DETAIL.md
needs_validation 源码有据但被一个精确的未解事实卡住(如部署控制不在源码里、沙箱能力缺失) 禁止——没验证就不许吓唬人 NEEDS-VALIDATION.md(附安全验证计划)
rejected 候选被独立验证者证伪,留档防止下轮重复上报 无 findings.json 留痕

所有记录写入 findings.json,过 report-schema.json + 零依赖校验器;Phase 5 替换掉的记录还要再过一轮独立验证。

知识资产

10 个攻击域提示词库

Web 协议与认证

HTTP 请求走私、缓存、认证协议

内存安全与二进制

内存损坏、内核攻击类(原生目标)

AI 与 LLM

提示注入、agent/工具链、输出处理

客户端

DOM 注入、消息信任、UI 重定向、原型污染

供应链与发布

依赖、CI、签名、更新、插件

云与部署

IAM、IaC、容器、serverless、入口

RPC 与消息

序列化、队列、broker、webhook、流协议

资源耗尽与可用性

共享资源、配额、worker、运营花费

数据隔离与生命周期

租户隔离、缓存、备份、删除与恢复

桌面/移动/本地 IPC原生应用、深链、webview、导出组件、守护进程、本地 IPC——第 10 个域文件

另有 ATTACK-CLASSES.md(核心 + 通配 + 显而易见类)做总纲;侦察阶段按目标形态选伴生域文件。

方法论

五条设计原则

工程细节

执行安全:把目标代码关进笼子

OS 级沙箱五项强制控制
  • 断外网;本地客户端/服务端流量只走隔离回环
  • 空环境 + 显式 allowlist 变量,scratch 专属 HOME
  • 目标与工具链只读,进程只能写自己的 scratch/
  • 显式 CPU / 内存 / 进程 / 文件 / 磁盘 / 时钟限额
  • dummy 主体与夹具;禁碰生产、共享设施、真实凭据
晋升流程(scratch → artifacts)

受信父侧代码逐文件晋升:拒绝 symlink 与路径穿越、fstat 校验 inode 类型与链接数、逐文件与累计字节限额、创建目标须独占……一套 11 步 race-safe 规程,两个角色(猎手/验证者)提示词里内嵌同一份逐字相同的规程块。

沙箱控制缺失时唯一出路:不执行目标代码,降级为 needs_validation + 安全验证计划。

方法论

严重度锚点:讲不出具体伤害,就降档

档位判据(必须已证实)
critical未认证主体获得代码执行、全库数据访问或任意账户接管
high完全击穿显式安全控制且有实际后果:认证绕过、跨租户读写、影响他人的存储型脚本、认证后 RCE
medium真实边界违规但爆炸半径有限 / 前置条件少见 / 后果局限于窄资源集
low泄露非敏感内部信息,或需持续投入换取微小收益的效果
informational已证实但影响极小,主要作为更大 finding 的前置件

高低分水岭一句话:证实的结果是完全击穿显式控制并造成实际后果,还是只是削弱了它?整体严重度不得高于已证影响。

方法论

十条反模式(精选六条)

另有:报告强于观察效果、独立复核前出报告、把上一轮 confirmed 当锚点示例等——十条全部写死在 SKILL.md。

在线体验

亲手玩一遍三档裁决

这个项目最有即时反馈价值的核心机制是裁决纪律:给定一条候选的事实清单(有没有点名边界?证据链齐不齐?验证者能不能复现?),看它掉进 confirmed / needs_validation / rejected 哪一档、严重度会不会被闸门拦下。

▶ 打开 Finding Triage Playground

规则 1:1 复刻自仓库 SKILL.md 与 report-schema 的判定语义,已通过全真值表验证。

快速上手

三条命令,无框架依赖

# 安装 skill(skills.sh CLI)
npx skills add https://github.com/cloudflare/security-audit-skill \
  --skill security-audit

# 在目标代码库里对 coding agent 说:
security audit this codebase
find security vulnerabilities in ./src
do a security review, output to ~/audits/x
双运行模式
  • Guidance 模式(默认):安全问答 / 聚焦审查,只取相关章节,不建目录不写产物
  • Full audit 模式:明确要求审计 / 渗透测试 / 报告产物时触发,六阶段全跑,产物默认写 ~/security-audit-skill/<repo>/run-N
前置要求
  • 支持工具调用 + 并行子 agent 的 coding agent
  • Node.js(跑两个零依赖校验器)
  • OS 级沙箱(build/测试/fuzz 只准在笼子里跑)
生态位

和谁不一样:审计员,不是扫描器或渗透队

vs SAST 扫描器

Semgrep/CodeQL 靠规则匹配,覆盖确定但只会找已知模式;本 skill 让 LLM 理解信任边界与业务语义,代价是必须用流程纪律压住幻觉。

vs 自主渗透框架

Strix 类项目攻击运行中的环境(打靶机);本 skill 只读源码 + 本地沙箱夹具验证,不碰部署端点,输出 owner 视角的证据与最小修复。

vs 裸问 LLM

随手问一次 = 上下文耗尽 + 自查自证;本 skill 用隔离角色、覆盖账本、对抗验证把「问一下」变成可累加的工程流程。

出身注脚:它是 Cloudflare 内部「fleet-wide 漏洞发现 harness」的单仓种子,博客 Build your own vulnerability harness 讲了完整演化故事——你看到的 19 个文件就是那套全公司系统的最小起点。

适用场景 / 风险提示

适合谁用,需要警惕什么

适合
  • 已有 coding agent 的安全团队:把 AI 审计从玩具变成有账本、有对抗、可复现的流程
  • 平台工程 / DevSecOps:多轮累加跑同一仓库,变更复验、缺口补扫
  • AI + 安全研究者:多 agent 编排 + 写隔离 + 防幻觉纪律的教科书级开源样本
警惕
  • 吃模型:并行子 agent + 工具调用是硬门槛,弱模型跑不出文档承诺的纪律
  • token 成本高:六阶段 × 多猎手 × 多轮,一次全量审计的账单不小
  • 效果依赖沙箱合规:沙箱控制不齐时自动降级 needs_validation,实测收益打折
  • 不替代人工:confirmed 也只是「边界失败已证」,修复优先级仍需人拍板
潜力评估

未来空间

三个月 13.9k stars,验证了「skill 即审计流水线」范式的需求真实存在。作为 Cloudflare fleet harness 的公开种子,它的提示词架构、写隔离规程、覆盖账本设计会被大量 AI 安全工具抄作业——范式级影响力大于工具本身。


上一个
GitHub 搞钱图鉴
下一个
Anki
1 / 18