用途
cairo-auditor 是一个 Cairo/Starknet 代码安全审计技能。它作为编排器,负责发现范围内文件、运行确定性预检、派生扫描智能体,然后将各智能体的发现合并并去重为单一报告。触发词包括 "audit"、"check this contract"、"review for security"。
主要能力
- 并行化审计编排:默认流程见 workflows/default.md,深度流程见 workflows/deep.md。
- 结构化发现与报告:参考 references/structured-findings.md 与 references/report-formatting.md。
- 确定性预检:通过 scripts/quality/audit_local_repo.py 对全仓库模式运行预检,输出类别计数与严重性计数。
- 攻击面映射:通过 scripts/quality/surface_map.py 生成静态审计面映射(JSON 与 Markdown)。
- 多智能体扫描:Agents 1–4 进行向量扫描,deep 模式额外启用 Agent 5 对抗推理智能体。
- 威胁情报富化(deep 模式可选):读取 references/threat-intel-sources.md,通过 curl 获取一手安全材料,最多 6 个来源、12 条信号,仅作为优先级辅助,不能单独据此报告发现。
- 错误码与恢复:定义 CAUD-001 至 CAUD-009,覆盖文件发现为零、预检失败、智能体包生成失败、发现冲突、仅低置信度、深度模式专家不可用、主机能力预检失败、传输不稳定、严格模型要求无法满足等情形。
使用方式
模式选择:
- 默认(无参数):扫描仓库中所有 .cairo 文件,应用排除模式。
- deep:与默认范围相同,但额外派生对抗推理智能体(Agent 5),更彻底但更慢、成本更高。
- $filename ...:仅扫描指定文件。
排除模式(适用于所有模式):
- 通过 find ... -prune 跳过目录名:test、tests、mock、mocks、example、examples、preset、presets、fixture、fixtures、vendor、vendors。
- 跳过匹配文件:*_test.cairo、Test.cairo。
标志:
- --file-output(默认关闭):同时将报告写入 markdown 文件;否则仅输出到终端。
- --allow-degraded(默认关闭):当专家智能体无法派生时允许降级执行。
- --strict-models(默认关闭):要求主机模型映射精确匹配(claude-code: sonnet+opus,codex: gpt-5.4);不可用时以 CAUD-009 失败关闭,除非显式设置 --allow-degraded。
- --proven-only(默认关闭):对最强证据仅为 [CODE-TRACE](无已执行证明标签)的发现,将严重性上限设为 Low。
工作目录:若设置 CAIRO_AUDITOR_WORKDIR 则使用之,否则用 mktemp -d 创建并 chmod 700,Turn 1 输出 WORKDIR=<absolute-path> 并在后续复用。
编排流程:
- Turn 1 — Discover:打印横幅,并行解析范围内 .cairo 文件到 {workdir}/cairo-audit-files.txt;定位 references/attack-vectors/attack-vectors-1.md 以解析 {refs_root} 与 {skill_root};若存在 scripts/quality/audit_local_repo.py,对全仓库模式运行确定性预检。
- Turn 2 — Prepare:并行读取 agents/vector-scan.md、references/structured-findings.md、references/report-formatting.md;构建审计面映射;创建四个每智能体包文件(cairo-audit-agent-{1,2,3,4}-bundle.md),每个包拼接范围内 .cairo 文件、judging.md、structured-findings.md、report-formatting.md 以及各自的 attack-vectors-N.md。
- Turn 2.5 — Threat Intel Enrichment(deep 模式可选):网络可用时执行富化,写入 {workdir}/cairo-audit-threat-intel.md;预检查 curl 是否存在与连通性,失败则标记 SKIPPED 或 FAILED 并继续。
- Turn 3 — Spawn:仅使用前台 Agent 工具调用(不使用 run_in_background)。始终并行派生 Agents 1–4;deep 模式下自适应扇出:若最大范围内文件 <= 1000 行且所有包 <= 1400 行,则 Agent 5 与 Agents 1–4 并行,否则分两波(Wave A: Agents 1–4;Wave B: Agent 5)。
主机感知模型路由:
- claude-code:VECTOR_MODEL=sonnet,ADVERSARIAL_MODEL=opus。
- codex:VECTOR_MODEL=gpt-5.4,ADVERSARIAL_MODEL=gpt-5.4;若 gpt-5.4 探测失败且未设 --strict-models,则两者回退到 gpt-5.2。
- unknown:VECTOR_MODEL=sonnet,ADVERSARIAL_MODEL=opus。
- 将所选计划持久化到 {workdir}/cairo-audit-model-plan.txt。
主机能力预检(deep 模式,实验性):检测主机家族(codex、claude-code、unknown),验证 Agent 工具可用性与派生专家能力,deep 模式需要 5 个专家智能体(Agents 1–4 + Agent 5)。通过 Bash 验证威胁情报获取能力(command -v curl 成功,且 curl -sfI --connect-timeout 5 --max-time 10 https://starknet.io 成功)。对 codex 主机,用 model: gpt-5.4 运行一次轻量专家探测。预检证据持久化到 {workdir}/cairo-audit-host-capabilities.json。若预检失败:无 --allow-degraded 时发出 CAUD-007、打印补救措施并在发现前停止;有 --allow-degraded 时以 degraded-deep 模式继续并保留显式警告。补救提示:codex 执行 codex features enable multi_agent,再用 codex features list 验证并重启会话;claude-code 运行 /reload-plugins,必要时更新已安装插件后重试 deep 模式。
Starknet.js 示例(用于分诊与利用路径验证):
import { Account, Contract, RpcProvider } from "starknet";
const provider = new RpcProvider({ nodeUrl: process.env.STARKNET_RPC! });
const account = new Account({ provider, address: process.env.ACCOUNT_ADDRESS!, signer: process.env.PRIVATE_KEY! });
const contract = new Contract({ abi, address: process.env.CONTRACT_ADDRESS!, providerOrAccount: account });
try {
// View call for quick sanity checks while triaging findings.
const owner = await contract.call("owner", []);
// State-changing probe used during exploit-path validation.
const tx = await contract.invoke("set_owner", [owner]);
const receipt = await provider.waitForTransaction(tx.transaction_hash);
console.log({ finality: receipt.finality_status });
} catch (err) {
console.error("audit probe failed", err);
}
适用场景
- 合并前对 Cairo/Starknet 合约进行安全审查。
- 对账户/会话/升级关键路径进行发布门禁审计。
- 对来自 CI、评审者或外部报告的可疑发现进行分诊。
限制
- 不适用于功能实现任务、纯部署运维、SDK/教程请求。
- 需拒绝的合理化理由包括:"测试通过所以安全"、"这在 EVM 中正常所以 Cairo 相同"、"需要管理员权限所以不是漏洞"、"可以暂时忽略重放或 nonce 边界"。
- 威胁情报仅作为优先级辅助,绝不能仅凭情报报告发现;每个报告的发现仍须通过本地误报门禁并具有具体范围内路径。
- deep 模式更慢且成本更高;专家智能体不可用时需支持 Agent 工具的环境,启用失败关闭强制时 --allow-degraded 显式允许回退。
- 具体收费、价格、平台支持范围等事实暂未提供。