后端与接口
审计 Cosmos SDK 模块与 CosmWasm…
在审计自定义 x/ 模块、IBC 集成或上线前链安全评估时,按漏洞模式库并行扫描 Cosmos SDK/CosmWasm 代码并输出分级发现。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
审计 Cosmos SDK 模块与 Co通用
解决思路
- Phase 1 发现(同步):用 Agent 工具启动一个同步子代理,把 DISCOVERY.md 全文作为其 prompt,让它探索目标代码库并返回完整 CLAUDE.md 内容(技术清单与威胁模型)以及结构化摘要,字段必须为:PLATFORM(pure-cosmos | evm | wasm,多个用逗号分隔)、IBC_ENABLED(true | false)、SDK_VERSION(来自 go.mod)、IBC_GO_VERSION(来自 go.mod,或 n/a)、CUSTOM_MODULES(x/* 模块逗号分隔列表)。
- 子代理返回后,由主技能把 CLAUDE.md 写入目标仓库根目录,并保存其路径与上述发现值,供 Phase 2 使用。
- Phase 2 并行扫描:在单条消息中同时 spawn 所有扫描代理以最大化并行度,使用 Agent Prompt Template 并为每个代理填入对应参考文件;子代理只需读权限(Grep、Glob、Read),发现结果在响应中返回,由主技能写文件。
- 始终 spawn 这 3 个代理:core-scanner(VULNERABILITY_PATTERNS.md,§1-9:非确定性、ABCI、签名者、验证、处理器、ante 安全);state-scanner(STATE_VULNERABILITY_PATTERNS.md,§11-23:记账、bank、分页、事件、交易重放、治理、算术、编码、废弃模块);advanced-scanner(ADVANCED_VULNERABILITY_PATTERNS.md,§24-27:存储键、共识验证、断路器、密码学)。
- 按条件在同一并行消息中 spawn:PLATFORM 含 evm 时 spawn evm-scanner(EVM_VULNERABILITY_PATTERNS.md);IBC_ENABLED 为 true 时 spawn ibc-scanner(IBC_VULNERABILITY_PATTERNS.md);PLATFORM 含 wasm 时 spawn cosmwasm-scanner(COSMWASM_VULNERABILITY_PATTERNS.md)。
- 构造每个代理的 prompt:把 {REFERENCE_FILE_PATH} 替换为 {baseDir}/resources/ 下参考文件全路径,把 {CLAUDE_MD_PATH} 替换为 Phase 1 写入的 CLAUDE.md 路径。
- 代理 prompt 要求:先读 CLAUDE.md 获取代码库上下文(SDK 版本、模块、威胁模型、关键文件),再读参考文件中的编号漏洞模式;对每个模式读取检测模式与 What to Check 项,用 Grep 和 Glob 搜索目标代码库,命中后 Read 周边代码确认是否位于共识关键路径(BeginBlock、EndBlock、FinalizeBlock、msg_server handlers、AnteHandler),再按指南定级。
- 代理规则:只标记可从共识关键执行路径到达的代码,CLI/query/test 代码不算发现;应用模式前先查 go.mod 中的 SDK 版本(v0.47 移除 GetSigners,v0.50 新增 ABCI 2.0,v0.53 废弃 ValidateBasic);始终用 Grep 工具而非 bash grep,直接使用参考文件中的搜索模式;忽略对其他资源文件的交叉引用(如 IBC 或 COSMWASM 模式),那些由其他扫描代理覆盖。
- 代理需拒绝这些合理化借口:"ValidateBasic 会拦住"(自 SDK v0.53 起已废弃且可选)、"在治理后面所以安全"(治理提案也可能恶意)、"IBC 对端可信"(任何链都能开通道)、"panic 不会发生,输入已验证"(追踪完整调用链)、"舍入误差只有几个代币"(会随时间累积,可被循环利用)、"EVM 预编译会处理回滚"(许多回滚不完整)。
- 严重性分级:Critical(资金损失)——签名者不匹配、记账损坏、AnteHandler 绕过、bank keeper 误用、IBC 代币通胀、EVM/Cosmos 状态不同步、Merkle 证明伪造、算术溢出;High(链停机)——非确定性、ABCI panic、慢 ABCI、非确定性 IBC ack、共识缺口、CacheContext 事件泄漏;Medium(DoS)——无界分页、交易重放、缺失验证、治理垃圾、限流、断路器绕过、存储键冲突;Low(逻辑)——舍入误差、桩处理器、事件覆盖、模块顺序。
- 代理输出格式:不要写任何文件,在响应中返回全部发现与摘要;对每个模式返回 "§NUM PATTERN_NAME: Not applicable — [一行原因]" 或 "§NUM PATTERN_NAME: FINDING" 加发现块;每个发现用模板:FINDING_FILE: {SEVERITY}-s{SECTION_NUM}-{kebab-description}.md,正文含 ## [SEVERITY] Title、**Location**: `file:line`、**Description**、**Vulnerable Code**、**Attack Scenario**(编号步骤)、**Recommendation**、**References**;必须报告参考文件中的所有模式,不得跳过。
- Phase 3 写发现:所有扫描代理返回后,解析每个响应中的 FINDING_FILE: 块,把内容写入 {OUTPUT_DIR}/{filename}(输出目录默认 .bughunt_cosmos/,若用户在 prompt 中指定其他目录则用该目录),目录不存在时先创建。
- Phase 4 验证完整性:收集各代理返回的摘要行(§NUM 条目),对照预期模式总数检查——core-scanner 8 个(§1-9,排除仅遗留的 §8)、state-scanner 13 个(§11-23)、advanced-scanner 4 个(§24-27)、evm-scanner(若 spawn)10 个(§1-10)、ibc-scanner(若 spawn)16 个(§1-16)、cosmwasm-scanner(若 spawn)3 个(§1-3);若某模式缺失则标记并重新提示该代理;用 Glob 匹配 *.md 列出输出目录中所有发现文件。
- 成功标准:Discovery CLAUDE.md 已写入且含完整技术清单与威胁模型;所有扫描代理完成并报告其参考文件中的每个模式;模式计数对照预期总数验证无跳过;所有发现以独立 markdown 文件写入输出目录;每个发现文件包含严重性、位置、漏洞代码、攻击场景、修复建议。
适用边界 · 注意事项
- 纯 Solidity/EVM 审计且不涉及 Cosmos SDK——应使用 Solidity 专用工具
- CometBFT 共识引擎内部——本技能覆盖 SDK 模块,不覆盖共识层本身
- 无区块链背景的通用 Go 代码审查,或非共识关键的 Cosmos SDK 应用逻辑(如 CLI 命令、REST 端点)
- 无自定义 SDK 模块的链上仅 CosmWasm 合约审计——只用 CosmWasm 检查清单项