cm-security · git:20260916.c144c45 · 2026-09-16 · sha256 64e6d7778313371b
cm-security git:20260916.c144c45A
Immutable. This exact content is served forever at /api/v1/blob/64e6d7778313371b.
---
name: cm-security
description: 用户运行 cm-security,或要求代码安全扫描、漏洞检查、密钥泄露排查、依赖漏洞检查时使用。默认检查当前分支相对主分支及已跟踪未提交修改,结合业务地图复核;--all 检查全部已跟踪文件。只报告问题,不自动修复、安装、升级或发布。安装自检用 cm-check,功能测试与覆盖率用 cm-test。
---
# cm-security — 代码安全扫描与业务复核
先读 `../../runtime/project-context.md` 和 [执行合同](references/scan-contract.md)。
本 Skill 是独立只读安全入口;不改变 cm-test、任务完成门禁或发布授权。
Codex 用 `$cm-security`,Claude Code 用 `/cm-security`;macOS/Linux 兼容 `/cm:security`。
## 用法
```text
$cm-security
$cm-security {项目路径}
$cm-security {项目路径} --all
$cm-security {项目路径} --semgrep-rules {已审查的外部本地规则文件}
$cm-security {项目路径} --osv-db {外部离线数据库缓存目录}
```
## 执行
1. 省略项目时解析当前 Git 仓库根。显式路径也定位到该仓库根;无 Git/HEAD、主分支缺失或有歧义时停止并说明,不猜基准,不自动 fetch。`--all` 不要求主分支,但仍要求 Git/HEAD。
2. 先确认地图在 Git index 中为普通已跟踪文件,再加载业务地图,只读核对受影响的入口、调用方、权限与数据流。地图缺失、陈旧或失真时,从相关代码补足本次分析,标明缺口;不自动全仓重建或更新地图。
3. 从当前 Skill 位置解析 `{CM_WORKFLOW_ROOT}`,逐项传参数,禁止拼接用户文本为 shell 命令:
```bash
node "{CM_WORKFLOW_ROOT}/scripts/cm-security.mjs" --project "{项目根}" {已解析的可选参数}
```
4. 保留 JSON 的范围、digest、工具状态、遗漏和 findings。退出码 1 表示发现候选问题,3 表示检查仍不完整,均需继续上下文复核;2 表示阻断,只汇报阻断原因。0 可能是 NO_CHANGES,不是安全认证。
5. 对 selected 中每个路径做轻量 AI 复核。先看改动及调用链,再看扫描候选;只加载相关代码,禁止默认加载整套外部审计 Skill。命中或触及鉴权、支付、跨租户、命令/文件/网络边界时,沿该路径深入。
6. 逐项核验输入是否可控、现有防护是否有效、受影响业务及复现条件。分别检查工作区与不同的暂存版本;删除或改名必须结合基准版本和调用方,不能只看剩余文件。引用 `revision + 文件:行号`。
7. 对越权、注入、路径穿越、SSRF、敏感信息暴露、依赖漏洞给出有证据的判断。工具输出只算候选;没有测试或一般最佳实践不足以认定漏洞。无需主动执行 PoC、项目脚本、安装依赖或访问业务服务。
8. 按同样参数追加 `--inventory` 再运行脚本,与第一次 digest 对比。发生变化时标记 BLOCKED/证据过期;不替用户回滚。此复核只覆盖所选源码/暂存与地图,未读路径不能声称已核验。
9. 输出简短结论与报告。报告用 `mktemp -d` 在项目外创建本次专用目录,记录 JSON 中的脱敏字段与 AI 结论;不要写入任意传入源码目录或 tasks/specs。默认扫描不自动修复、不安装、不提交、不上传给额外服务;需要修复时将证据交给用户决定。
## 报告
```text
安全检查:FINDINGS / REVIEWED_PARTIAL / NO_CHANGES / BLOCKED
范围:基准 → 当前分支 + 已跟踪暂存/工作区,或全部已跟踪文件
业务地图:已核验 / 部分核验 / 缺失 / 陈旧
发现:严重程度、文件:行号、受影响业务、证据与修复建议
工具覆盖:逐个列版本、完成/缺失/失败/未配置与遗漏
AI 复核:已复核路径、未复核路径、已确认/待验证/误报理由
源码一致性:一致 / 变化 / 未能确认
报告:绝对路径
```
存在候选问题时使用 FINDINGS,并分清已确认与待验证;源码漂移或范围不可信优先 BLOCKED。
无发现但规则、依赖数据库、语言或 AI 覆盖不完整时使用 REVIEWED_PARTIAL。
即使所选检查全完成,也只能说明本轮未发现问题,不能输出“没有漏洞”或替代独立 Review。
未跟踪文件只报告数量,不读取;需要包含时由用户明确选择并另行确认范围,不自动 git add。