欢迎来到 elttam 的公开 semgrep 规则仓库。

我们在代码辅助安全审计和软件安全研究过程中定期开发规则。我们会经常为 semgrep 社区添加新规则并改进现有内容。我们希望使用 semgrep 的产品安全工程师和代码审计人员觉得这些规则有用!
如果你发现任何错误,请在 GitHub 上提交 issue。
本指南假定你熟悉 Semgrep 并且已经安装。
本仓库将规则分为两大类:
rules/ -- 对开发人员或 AppSec 团队有用的规则,通常是漏洞。rules-audit/ -- 对源代码审计、识别有趣行为以及枚举入口点有用的规则,用于增强手动源代码审查。使用以下命令测试本仓库:
git clone https://github.com/elttam/semgrep-rules.git
要测试这些规则,请运行:
semgrep --config semgrep-rules/rules semgrep-rules/rules/
要测试审计类规则,请运行:
semgrep --config semgrep-rules/rules-audit semgrep-rules/rules-audit/
这些规则侧重于识别漏洞或其他弱点。
| Rule Path | Language | Technology | Description |
|---|---|---|---|
| generic/jsp-likely-xss | Generic | JSP | 检测模板中不安全渲染导致的 XSS |
| go/lang/security/audit/executable-symlink | Go | 使用 os.Executable 时可能发生的符号链接接管 | |
| go/lang/security/audit/sprintf-plain-string | Go | Sprintf 未转义的控制字符 | |
| go/lang/security/audit/uintptr-nonatomic | Go | 对转换后的 uintptr 进行非原子使用 | |
| java/lang/security/audit/crypto/gcm-static-iv | Java | 查找密钥与 IV 使用相同值的 GCM | |
| java/lang/security/audit/crypto/randomstringutils | Java | Apache Commons | 查找使用默认 java.util.Random 的 RandomStringUtils,不适合安全用途 |
| java/spring/security/audit/remoting/ | Java | Spring | 查找 Spring Remoting 的使用 |
| php/php-filter-chain-read-from-oracle | PHP | 检测可能基于 oracle 的 PHP filter chain 错误 | |
| yaml/github-actions/security/save-state | YAML | Github-Actions | 查找不安全且已弃用的 ::save-state 的使用 |
| yaml/github-actions/security/set-output | YAML | Github-Actions | 查找不安全且已弃用的 ::set-output 的使用 |
| yaml/kubernetes/audit/network-policy-ingress-any | YAML | Kubernetes | 查找入站规则(Ingress)允许 ANY 的 NetworkPolicy 容器规格 |
| yaml/kubernetes/audit/privileged-container | YAML | Kubernetes | 查找安全上下文为 privileged 的容器规格 |
| yaml/kubernetes/security/allow-privileged-escalation | YAML | Kubernetes | 查找允许特权提升的容器规格,包括 init 容器(allowPrivilegeEscalation) |
| yaml/kubernetes/security/no-security-context | YAML | Kubernetes | 查找没有安全上下文的容器规格,考虑 Pod 或容器安全上下文。 |
| yaml/kubernetes/security/run-as-non-root | YAML | Kubernetes | 查找允许以 root 身份运行的容器规格(缺少 runAsNonRoot),考虑 Pod 和容器安全上下文 PR |
| yaml/kubernetes/security/run-as-non-root-unsafe-value | YAML | Kubernetes | 查找明确允许以 root 身份运行的容器规格(runAsNonRoot: false),考虑 Pod 和容器安全上下文 PR |
这些规则通过识别有趣行为或枚举入口点,有助于辅助手动源代码审查。
| Rule Path | Language | Technology | Description |
|---|---|---|---|
| c/lang/security/audit/exec | C | 查找进程的执行 | |
| csharp/dotnet/security/audit/entrypoints/apsnet-controller | C# | ASP.NET | 查找 ASP.NET REST 入口点 |
| java/jackson/polymorphic-typing | Java | Jackson | 查找多态类型(polymorphic typing),以帮助发现易受攻击的 Jackson 反序列化问题。 |
| java/jackson/type-resolver-override | Java | Jackson | 查找使用 TypeResolveBuilder 的多态类型 |
| java/jax-rs/security/audit/entrypoints/ | Java | JAX-RS | 查找 JAX-RS REST 入口点 |
| java/lang/security/audit/processbuilder | Java | 查找使用 ProcessBuilder 执行进程 | |
| java/spring/security/audit/entrypoints/ | Java | Spring | 查找 Spring REST 入口点 |
| java/struts2/security/audit/devmode/ | Java | Struts2 | 查找 devMode 的使用 |
| java/struts2/security/audit/dmi/ | Java | Struts2 | 查找动态方法调用(Dynamic Method Invocation)的使用 |
| java/struts2/security/audit/entrypoints/ | Java | Struts2 | 查找 Struts2 REST 入口点 |
| java/xstream/security/audit/fromxml | Java | XStream | 查找 XStream.fromXML(...) 的使用 |
| kotlin/spark/security/audit/entrypoints/ | Kotlin | Spark | 查找 Spark REST 入口点 |
| python/flask/security/audit/entrypoints/ | Python | Flask | 查找 Flask REST 入口点 |