
关于
创建现有 Semgrep 规则的语言变体。适用于将 Semgrep 规则移植到指定目标语言。接受现有规则和目标语言作为输入,为每种语言生成独立的规则+测试目录。
name: semgrep-rule-variant-creator description: 创建现有 Semgrep 规则的语言变体。当需要将 Semgrep 规则移植到指定目标语言时使用。接收现有规则和目标语言作为输入,为每种语言生成独立的规则+测试目录。 allowed-tools: ... risk: unknown source: community
Semgrep 规则变体创建器
将现有 Semgrep 规则移植到新的目标语言,并进行适当的适用性分析和测试驱动验证。
何时使用
理想场景:
- 将现有 Semgrep 规则移植到一种或多种目标语言
- 为通用漏洞模式创建特定语言的变体
- 在多语言代码库中扩展规则覆盖范围
- 在具有等效构造的语言之间翻译规则
何时不使用
不要在以下情况使用此技能:
- 从零开始创建新的 Semgrep 规则(请改用
semgrep-rule-creator) - 对代码运行现有规则
- 漏洞模式从根本上不适用的语言
- 同一语言内的细微语法变化
输入规范
此技能需要:
- 现有 Semgrep 规则 - YAML 文件路径或 YAML 规则内容
- 目标语言 - 一种或多种要移植到的语言(例如 "Golang and Java")
输出规范
对于每种适用的目标语言,生成:
<original-rule-id>-<language>/
├── <original-rule-id>-<language>.yaml # 移植后的 Semgrep 规则
└── <original-rule-id>-<language>.<ext> # 带注释的测试文件
将 sql-injection 移植到 Go 和 Java 的输出示例:
sql-injection-golang/
├── sql-injection-golang.yaml
└── sql-injection-golang.go
sql-injection-java/
├── sql-injection-java.yaml
└── sql-injection-java.java
应拒绝的合理化借口
移植 Semgrep 规则时,拒绝以下常见捷径:
| 合理化借口 | 为何失败 | 正确方法 | |------------|----------|----------| | "模式结构完全相同" | 不同语言有不同的 AST | 始终为目标语言转储 AST | | "相同漏洞,相同检测" | 语言间数据流不同 | 分析目标语言惯用法 | | "规则不需要测试因为原始规则有效" | 语言边界情况不同 | 为目标编写新测试用例 | | "跳过适用性分析——显然适用" | 某些模式是语言特定的 | 先完成适用性分析 | | "我先创建所有变体再测试" | 错误会累积,难以调试 | 每种语言完成完整周期 | | "库等效物足够接近" | 表面相似隐藏差异 | 验证 API 语义匹配 | | "只需 1:1 翻译语法" | 语言有不同的惯用法 | 研究目标语言模式 |
严格级别
此工作流是严格的 - 不要跳过步骤:
- 适用性分析是必须的:不要假设模式可以翻译
- 每种语言是独立的:在移动到下一种之前完成完整周期
- 每个变体测试优先:永远不要在没有测试用例的情况下编写规则
- 要求 100% 测试通过:"大部分测试通过"是不可接受的
概述
此技能指导创建现有 Semgrep 规则的特定语言变体。每种目标语言经历独立的 4 阶段周期:
FOR EACH target language:
Phase 1: Applicability Analysis → Verdict
Phase 2: Test Creation (Test-First)
Phase 3: Rule Creation
Phase 4: Validation
(Complete full cycle before moving to next language)
基础知识
semgrep-rule-creator 技能是 Semgrep 规则创建基础的权威参考。 虽然此技能专注于将现有规则移植到新语言,但编写高质量规则的核心原则保持不变。
参考 semgrep-rule-creator 获取以下指导:
- 何时使用 taint 模式 vs 模式匹配 - 为漏洞类型选择正确的方法
- 测试优先方法论 - 为什么测试先于规则以及如何编写有效的测试用例
- 要避免的反模式 - 常见错误如过于宽泛或过于具体的模式
- 迭代直到测试通过 - 验证循环和调试技术
- 规则优化 - 测试通过后移除冗余模式
移植规则时,你是在新的语言上下文中应用这些相同的原则。如果对规则结构或方法不确定,请先参考 semgrep-rule-creator。
四阶段工作流
阶段 1:适用性分析
移植之前,确定模式是否适用于目标语言。
分析标准:
- 目标语言中是否存在该漏洞类别?
- 是否存在等效构造(函数、模式、库)?
- 语义是否足够相似以进行有意义的检测?
判定选项:
APPLICABLE→ 继续创建变体APPLICABLE_WITH_ADAPTATION→ 继续但需要重大更改NOT_APPLICABLE→ 跳过此语言,记录原因
详见 applicability-analysis.md