SuperAPI AI 工具集

semgrep-rule-variant-creator

通用与其它

查看项目

更新于 10-16 03:37

技能介绍

用途:把一条已有的 Semgrep 规则移植到一个或多个目标语言,生成语言专用的变体规则,并为每种语言输出规则 YAML 与带注解的测试文件。不适用于从零创建新规则(应使用 semgrep-rule-creator)、运行已有规则、或该漏洞模式在目标语言根本不成立的情况。

必要输入:已有 Semgrep 规则的 YAML 路径或内容,以及一个或多个目标语言。

主要能力与工作流:对每种目标语言独立执行完整四阶段循环,且一种语言完成后再进行下一种。

  1. 适用性分析:判断该漏洞类、等价构造与语义在目标语言是否存在,结论为 APPLICABLE、APPLICABLE_WITH_ADAPTATION 或 NOT_APPLICABLE(后者需记录原因并跳过)。
  2. 测试先行:用目标语言习惯写法编写测试,至少 2 个漏洞用例(ruleid:)和 2 个安全用例(ok:),包含语言特有的边界情况。
  3. 规则创建:先用 semgrep --dump-ast -l <lang> test-file 分析 AST,再翻译模式,更新 language、message、规则 ID 等元数据,并适配目标语言惯用法。
  4. 验证:必须全部测试通过。

常用命令: semgrep --validate --config rule.yaml semgrep --test --config rule.yaml test-file semgrep --dump-ast -l <lang> <file> semgrep --dataflow-traces -f rule.yaml test-file

输出结构示例:sql-injection-golang/sql-injection-golang.yaml 与 .go 测试文件;sql-injection-java/ 下同理为 .yaml 与 .java。

限制与要求:流程严格,不得跳过步骤;禁止“模式结构相同”“库等价物足够接近”“先建完所有变体再测试”等捷径假设。必须为每个变体新写测试,要求 100% 测试通过。创建规则的核心原则以 semgrep-rule-creator 为准(taint 与模式匹配选择、测试先行、反模式、迭代与优化)。若缺少必要输入、权限、安全边界或成功标准,应停下请求澄清;输出不能替代针对具体环境的验证、测试或专家审查。