Semgrep 自定义模式生成器
将以下提示词粘贴到你的 AI 对话框中:
请根据官方安装指南 https://skillhub.cn/install/skillhub.md,将规范名为 @user_3c6cb52e/semgrep-custom-pattern-generator 的 Semgrep 自定义模式生成器技能安装到你的 AI 助手中。
技能介绍
要解决的问题
写 Semgrep 规则的门槛比想象中高。拿到一份漏洞描述(比如"用户输入未经校验直接拼进 SQL"),你得先判断该用 pattern 还是 pattern-either,再想清楚 metavariable-regex 怎么限定污点形态,最后还要决定 mode: taint 的 sources 和 sinks 分别落在哪些函数上。手工写出的规则经常要么太松(满屏误报),要么太紧(漏掉真正的调用链)。这个技能把"从自然语言漏洞描述到可执行 YAML 规则"这一步自动化。
它如何工作
核心流程可以拆成三步:
- 解析漏洞描述:识别漏洞类型、触发条件和受影响的代码模式,而不是简单做关键词匹配。
- 映射到
semgrep-rulesYAML schema:根据描述选择规则骨架——精确匹配用pattern,需要覆盖面时用pattern-either组合多个子模式。 - 生成进阶结构:支持
metavariable-pattern约束元变量形态,支持taints配合joins做跨函数污点追踪,比如污点从request.getParameter()传入,经过中间函数加工后才到达Statement.executeQuery()。
生成的规则可以直接放进 .semgrep.yml 跑 semgrep ci,也能并入现有 SAST 流水线与其他扫描工具并存。
适用边界
- 它产出的是规则草稿,不是审计结论。误报率取决于描述本身的精确度,描述含糊时生成的规则大概率需要人工收紧。
- 跨函数 join 依赖函数签名和调用图信息,动态分派、反射调用这类场景覆盖不到。
- 复杂业务语义(权限模型、数据分类)不在规则表达能力内,这类约束仍需人工补充
pattern-inside或自定义元变量校验。 - 只面向 Semgrep 原生 schema,想转成其他 SAST 工具的 IR 需要额外适配。
使用场景
- 收到漏洞描述后,需要快速产出 Semgrep 规则草稿并用 `semgrep ci` 跑一遍验证覆盖效果。
- 排查跨函数的数据流问题,要写带 `taints` 与 `joins` 的 taint 模式规则。
- 为内部框架补充规则库,用 `pattern-either` 组合多个代码形态做精确匹配。
- 把历史 CVE 或渗透报告里的漏洞描述批量转成规则,挂进 CI 流水线统一扫描。
适合人员
- 应用安全工程师:要按漏洞描述快速产出可入库的 Semgrep 规则,减少手工写 YAML 的时间。
- 后端开发工程师:想在 CI 里接入 Semgrep 扫描,但对 `semgrep-rules` schema 写法不熟悉。
- DevSecOps 工程师:负责维护 SAST 规则库,需要覆盖跨函数的输入校验与污点传播缺陷。