mcpField
C
commit-security-scan

commit-security-scan

github.com/factory-ai安全117118 次安装3 天前更新
代码仓库

关于 commit-security-scan

commit-security-scan 是用于审查提交、PR 和差异的安全扫描技能,面向代码审查与提交前检查。它结合仓库威胁模型,按 STRIDE 分析并生成安全发现报告。

主要功能

  1. 01扫描提交、PR 和代码差异
  2. 02按 STRIDE 检查漏洞
  3. 03结合仓库威胁模型
  4. 04评估严重性与置信度
  5. 05生成 JSON 发现报告

适用场景

  1. 01审查 PR 中的安全风险
  2. 02提交前扫描暂存改动
  3. 03比较分支或提交范围
  4. 04检查最近提交的漏洞

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/factory-ai/factory-plugins --skill commit-security-scan

安装后在 Claude Code 中输入/commit-security-scan确认已加载。

附带文件analysis-examples.md

详细介绍

提交安全扫描

使用 LLM 推理分析代码变更(提交、PR、差异),以检测安全漏洞。此技能会直接读取代码,并应用仓库威胁模型中的模式,识别所有 STRIDE 类别中的问题。

何时使用此技能

  • PR 审查 - 对拉取请求进行自动安全扫描
  • 提交前检查 - 提交前扫描暂存的变更
  • 分支比较 - 审查功能分支变更的安全性
  • 代码审查协助 - 帮助审查者发现安全问题

前置条件

此技能需要:

  1. 威胁模型 - 必须存在 .factory/threat-model.md
  2. 安全配置 - 用于设置严重性阈值的 .factory/security-config.json

重要:如果这些文件不存在,必须先生成它们,然后再进行安全扫描。

生成前置条件文件:

  1. 告诉用户:“威胁模型尚不存在。我会先生成它,然后再开始扫描。”
  2. 运行 threat-model-generation 技能以创建这两个文件
  3. 完成后,继续进行安全扫描

不要要求用户手动运行此技能——应在此工作流中自动执行。

输入

此技能根据用户的请求确定扫描内容:

扫描类型指定方式示例
PR“扫描 PR #123”Scan PR #456 for security vulnerabilities
提交范围“扫描提交 X..Y”Scan commits abc123..def456
单个提交“扫描提交 X”Scan commit abc123
暂存的变更“扫描暂存的变更”Scan my staged changes for security issues
未提交的变更“扫描未提交的变更”Scan working directory changes
分支比较“扫描从 X 到 Y 的变更”Scan changes from main to feature-branch
最近 N 个提交“扫描最近 N 个提交”Scan the last 3 commits

如果未指定范围,请提示用户进一步说明。

说明

按顺序执行以下步骤:

步骤 1:验证前置条件(缺少时自动生成)

尝试读取以下文件:

  • .factory/threat-model.md
  • .factory/security-config.json

如果任一文件缺失或无法读取:

  1. 告知用户:“安全威胁模型尚不存在。我会先生成它——这可能需要一分钟。”
  2. 调用 threat-model-generation 技能来分析仓库并创建这两个文件
  3. 生成完成后,继续执行步骤 2

这样可以确保安全扫描始终拥有准确分析所需的威胁模型上下文。

步骤 2:获取变更文件

根据用户的请求,使用 git 获取变更文件列表及其差异:

  • 对于 PR:使用 gh pr diff
  • 对于提交或范围:使用 git diff 或 git show
  • 对于暂存的变更:使用 git diff --cached

读取每个变更文件的完整内容以获取上下文。

步骤 3:加载威胁模型

读取 .factory/threat-model.md 和 .factory/security-config.json,以了解:

  • 系统架构和信任边界
  • 此代码库中已知的漏洞模式
  • 发现问题的严重性阈值
步骤 4:分析漏洞

针对每个变更文件,系统地检查 STRIDE 威胁:

S - 身份欺骗
  • 缺少或薄弱的身份验证检查
  • 会话处理漏洞
  • 代码中暴露令牌或凭据
  • 不安全的 Cookie 设置
T - 数据篡改
  • SQL 注入:在 SQL 查询中进行字符串拼接或插值
  • 命令注入:在 Shell 命令、eval()、exec() 中使用用户输入
  • XSS:在 HTML/模板中未转义的用户输入
  • 批量赋值:将请求数据盲目赋值给模型
  • 路径遍历:文件路径中使用未经验证的用户输入
R - 否认
  • 缺少对敏感操作的审计日志记录
  • 错误日志记录不足
  • 日志注入漏洞
I - 信息泄露
  • IDOR:直接访问对象时未验证所有权
  • 详细的错误消息泄露内部信息
  • 硬编码的密钥、API 密钥、凭据
  • 日志或响应中包含敏感数据
  • 暴露调试端点
D - 拒绝服务
  • 端点缺少速率限制
  • 资源消耗无上限(文件上传、查询)
  • 算法复杂度攻击(正则表达式、排序)
  • 列表端点缺少分页
E - 权限提升
  • 端点缺少授权检查
  • 可绕过角色/权限
  • 通过操纵参数提升权限
步骤 5:评估每项发现

对于每个潜在漏洞:

  1. 追踪数据流:从来源到接收点追踪用户输入

    • 输入来自哪里?(请求参数、请求体、请求头、文件)
    • 输入是否经过验证/净化?
    • 输入最终到达哪里?(数据库、Shell、响应、文件系统)
  2. 检查是否已有缓解措施:

    • 代码库其他位置是否进行了验证?
    • 是否有中间件/装饰器保护这段代码?
    • 框架是否提供自动防护?
  3. 确定严重程度:

    • CRITICAL:远程代码执行、身份验证绕过、数据泄露
    • HIGH:SQL 注入、XSS、IDOR、权限提升
    • MEDIUM:信息泄露、缺少安全响应头
    • LOW:违反最佳实践、轻微问题
  4. 评估置信度:

    • HIGH:存在明确的易受攻击模式、数据流直接、没有缓解措施
    • MEDIUM:可能存在漏洞,对上下文有些不确定
    • LOW:存在可疑模式,但可能有我们无法看到的缓解措施
步骤 6:生成报告

按照以下结构创建 security-findings.json:

{
  "scan_id": "scan-YYYY-MM-DD-XXX",
  "scan_date": "<ISO 8601 timestamp>",
  "scan_type": "pr|commit|range|staged|working",
  "commit_range": "<base>..<head>",
  "pr_number": null,
  "threat_model_version": "<from security-config.json>",
  "findings": [
    {
      "id": "VULN-001",
      "severity": "HIGH",
      "stride_category": "Tampering",
      "vulnerability_type": "SQL Injection",
      "cwe": "CWE-89",
      "file": "src/api/users.py",
      "line_range": "45-49",
      "code_context": "<vulnerable code snippet>",
      "analysis": "<explanation of why this is vulnerable>",
      "exploit_scenario": "<how an attacker could exploit this>",
      "threat_model_reference": "Section 5.2 - SQL Injection",
      "existing_mitigations": [],
      "recommended_fix": "<how to fix the vulnerability>",
      "confidence": "HIGH",
      "reasoning": "<why this confidence level>"
    }
  ],
  "summary": {
    "total_findings": 0,
    "by_severity": { "CRITICAL": 0, "HIGH": 0, "MEDIUM": 0, "LOW": 0 },
    "by_stride": {
      "Spoofing": 0,
      "Tampering": 0,
      "Repudiation": 0,
      "InfoDisclosure": 0,
      "DoS": 0,
      "ElevationOfPrivilege": 0
    },
    "files_analyzed": 0
  }
}
步骤 7:报告结果
  1. 将发现保存到 security-findings.json
  2. 向用户报告摘要(按严重程度统计发现数量、已触发的阈值)
  3. 检查 security-config.json 中的严重程度阈值,并注明是否有任何阈值已触发

CWE 参考

常见发现的 CWE 映射:

漏洞类型CWE
SQL 注入CWE-89
命令注入CWE-78
XSS(反射型)CWE-79
XSS(存储型)CWE-79
路径遍历CWE-22
IDORCWE-639
缺少身份验证CWE-306
缺少授权CWE-862
硬编码凭据CWE-798
敏感数据暴露CWE-200
批量赋值CWE-915
开放重定向CWE-601
SSRFCWE-918
XXECWE-611
不安全反序列化CWE-502

调用示例

扫描 PR:

Scan PR #123 for security vulnerabilities

提交前扫描暂存的更改:

Scan my staged changes for security issues

扫描功能分支:

Scan changes from main to feature/user-auth for vulnerabilities

扫描近期提交:

Scan the last 5 commits for security issues

参考资料

  • 分析示例:analysis-examples.md(位于此技能目录中)
  • 威胁模型:.factory/threat-model.md
  • 安全配置:.factory/security-config.json
  • OWASP Top 10
  • CWE Top 25

评论

支持 Markdown