用途
commit-security-scan 用于分析代码变更(提交、PR、diff),借助 LLM 推理检测安全漏洞。它直接读取代码,并应用仓库威胁模型中的模式,识别覆盖全部 STRIDE 类别的问题。
适用场景包括:
- PR 审查:对拉取请求进行自动化安全扫描
- 提交前检查:在提交前扫描暂存变更
- 分支对比:审查功能分支变更的安全性
- 代码审查辅助:帮助审查者发现安全问题
前置条件
该技能需要以下文件:
- 威胁模型:.factory/threat-model.md 必须存在
- 安全配置:.factory/security-config.json 用于严重程度阈值
如果这些文件不存在,必须先自动生成它们,再继续安全扫描。生成方式为调用 threat-model-generation 技能创建这两个文件,完成后继续扫描。
输入与扫描范围
技能根据用户请求确定扫描范围:
- PR:例如“Scan PR #123”
- 提交区间:例如“Scan commits X..Y”
- 单个提交:例如“Scan commit X”
- 暂存变更:例如“Scan staged changes”
- 未提交变更:例如“Scan uncommitted changes”
- 分支对比:例如“Scan from X to Y”
- 最近 N 次提交:例如“Scan last N commits”
如果未指定范围,会提示用户澄清。
使用方式
按以下步骤执行:
-
验证前置条件(缺失则自动生成):尝试读取 .factory/threat-model.md 和 .factory/security-config.json。若任一文件缺失或无法读取,告知用户将先生成威胁模型,然后调用 threat-model-generation 技能分析仓库并创建这两个文件,完成后继续。
-
获取变更文件:根据用户请求,使用 git 获取变更文件列表及其 diff。PR 使用 gh pr diff;提交/区间使用 git diff 或 git show;暂存变更使用 git diff --cached。同时读取每个变更文件的完整内容以获取上下文。
-
加载威胁模型:读取 .factory/threat-model.md 和 .factory/security-config.json,了解系统架构与信任边界、该代码库已知的漏洞模式、发现的严重程度阈值。
-
分析漏洞:对每个变更文件,系统检查 STRIDE 威胁:
- S - 身份伪造:缺失或薄弱的认证检查、会话处理漏洞、代码中的令牌/凭据暴露、不安全的 cookie 设置
- T - 数据篡改:SQL 注入(SQL 查询中的字符串拼接/插值)、命令注入(shell 命令、eval()、exec() 中的用户输入)、XSS(HTML/模板中未转义的用户输入)、批量赋值(请求到模型的盲目赋值)、路径遍历(未验证的文件路径中的用户输入)
- R - 抵赖:敏感操作缺少审计日志、错误日志不足、日志注入漏洞
- I - 信息泄露:IDOR(未验证所有权直接访问对象)、暴露内部信息的详细错误消息、硬编码密钥/API 密钥/凭据、日志或响应中的敏感数据、暴露的调试端点
- D - 拒绝服务:端点缺少速率限制、无界资源消耗(文件上传、查询)、算法复杂度攻击(正则、排序)、列表端点缺少分页
- E - 权限提升:端点缺少授权检查、角色/权限绕过机会、通过参数操纵提升权限
-
评估每个发现:追踪数据流(输入来源、是否经过验证/净化、最终去向),检查现有缓解措施(代码库其他位置的验证、中间件/装饰器、框架自动保护),确定严重程度(CRITICAL:远程代码执行、认证绕过、数据泄露;HIGH:SQL 注入、XSS、IDOR、权限提升;MEDIUM:信息泄露、缺少安全头;LOW:最佳实践违规、次要问题),评估置信度(HIGH:明确的漏洞模式、直接数据流、无缓解;MEDIUM:可能存在漏洞、上下文有不确定性;LOW:可疑模式、可能有看不到的缓解)。
-
生成报告:创建 security-findings.json,结构包含 scan_id、scan_date、scan_type、commit_range、pr_number、threat_model_version、findings 数组(每个发现含 id、severity、stride_category、vulnerability_type、cwe、file、line_range、code_context、analysis、exploit_scenario、threat_model_reference、existing_mitigations、recommended_fix、confidence、reasoning)以及 summary(total_findings、by_severity、by_stride、files_analyzed)。
-
报告结果:将发现保存到 security-findings.json,向用户报告摘要(按严重程度的发现数量、触发的阈值),检查 security-config.json 中的严重程度阈值并注明是否触发。
CWE 参考
常见漏洞类型与 CWE 映射:
- SQL 注入:CWE-89
- 命令注入:CWE-78
- XSS(反射型):CWE-79
- XSS(存储型):CWE-79
- 路径遍历:CWE-22
- IDOR:CWE-639
- 缺少认证:CWE-306
- 缺少授权:CWE-862
- 硬编码凭据:CWE-798
- 敏感数据暴露:CWE-200
- 批量赋值:CWE-915
- 开放重定向:CWE-601
- SSRF:CWE-918
- XXE:CWE-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
限制
资料未提供关于收费、价格、平台支持范围、扫描性能或误报率的具体信息。该技能依赖仓库中已存在或可生成的威胁模型与安全配置文件;若无法生成,扫描可能无法进行。