
Regras de análise estática de segurança para detecção de vulnerabilidades e revisão de código focada em auditoria em Java, Go, Python, C#, Kotlin, PHP, Kubernetes e GitHub Actions.
Bem-vindo ao repositório público de regras semgrep do elttam.

Desenvolvemos regularmente regras durante as nossas auditorias de segurança assistidas por código e pesquisas de segurança de software. Adicionaremos com frequência novas regras e melhoraremos o que está aqui para a comunidade semgrep. Esperamos que engenheiros de segurança de produtos e auditores de código que usam semgrep achem estas regras úteis!
Se encontrar algum bug, por favor abra uma issue no GitHub.
Este guia assume que você está familiarizado com o Semgrep e que já o tem instalado.
Este repositório dividiu as regras em duas grandes categorias:
rules/ -- Regras úteis para desenvolvedores ou equipes de AppSec, geralmente são vulnerabilidades.rules-audit/ -- Regras úteis para auditoria de código-fonte, identificação de comportamentos interessantes e enumeração de pontos de entrada, para complementar a revisão manual de código-fonte.Teste este repositório com o seguinte comando:
git clone https://github.com/elttam/semgrep-rules.git
Para testar as regras, execute:
semgrep --config semgrep-rules/rules semgrep-rules/rules/
Para testar as regras focadas em auditoria, execute:
semgrep --config semgrep-rules/rules-audit semgrep-rules/rules-audit/
Estas regras são focadas na identificação de vulnerabilidades ou outras fraquezas.
| Caminho da Regra | Linguagem | Tecnologia | Descrição |
|---|---|---|---|
| generic/jsp-likely-xss | Genérico | JSP | Detecta XSS com renderização insegura em template |
| go/lang/security/audit/executable-symlink | Go | Potencial tomada de symlink com os.Executable | |
| go/lang/security/audit/sprintf-plain-string | Go | Sprintf com caracteres de controle não escapados | |
| go/lang/security/audit/uintptr-nonatomic | Go | Uso não atômico de uintptr convertido | |
| java/lang/security/audit/crypto/gcm-static-iv | Java | Encontra GCM usando os mesmos valores para chave e IV | |
| java/lang/security/audit/crypto/randomstringutils | Java | Apache Commons | Encontra RandomStringUtils usando o java.util.Random padrão, que não é adequado para segurança |
| java/spring/security/audit/remoting/ | Java | Spring | Encontra o uso de Spring Remoting |
| php/php-filter-chain-read-from-oracle | PHP | Detecta possível oráculo baseado em erro de cadeia de filtros PHP | |
| yaml/github-actions/security/save-state | YAML | Github-Actions | Encontra o uso de ::save-state inseguro e obsoleto |
| yaml/github-actions/security/set-output | YAML | Github-Actions | Encontra o uso de ::set-output inseguro e obsoleto |
| yaml/kubernetes/audit/network-policy-ingress-any | YAML | Kubernetes | Encontra especificações de contêiner com NetworkPolicy com Ingress permitindo QUALQUER |
| yaml/kubernetes/audit/privileged-container | YAML | Kubernetes | Encontra especificações de contêiner com contexto de segurança privilegiado |
| yaml/kubernetes/security/allow-privileged-escalation | YAML | Kubernetes | Encontra especificações de contêiner, incluindo contêineres init, que permitem escalada de privilégios (allowPrivilegeEscalation) |
| yaml/kubernetes/security/no-security-context | YAML | Kubernetes | Encontra especificações de contêiner sem contexto de segurança, considerando o contexto de segurança do pod ou do contêiner. |
| yaml/kubernetes/security/run-as-non-root |
Estas regras são úteis para auxiliar a revisão manual de código-fonte, identificando comportamentos interessantes ou enumerando pontos de entrada.
| Caminho da Regra | Linguagem | Tecnologia | Descrição |
|---|---|---|---|
| c/lang/security/audit/exec | C | Encontra execução de processos | |
| csharp/dotnet/security/audit/entrypoints/apsnet-controller | C# | ASP.NET | Encontra pontos de entrada REST ASP.NET |
| java/jackson/polymorphic-typing | Java | Jackson | Encontra tipagem polimórfica para auxiliar na localização de problemas vulneráveis de desserialização Jackson. |
| java/jackson/type-resolver-override | Java | Jackson | Encontra tipagem polimórfica usando TypeResolveBuilder |
| java/jax-rs/security/audit/entrypoints/ | Java | JAX-RS | Encontra pontos de entrada REST JAX-RS |
| java/lang/security/audit/processbuilder | Java | Encontra execução de processos com ProcessBuilder | |
| java/spring/security/audit/entrypoints/ | Java | Spring | Encontra pontos de entrada REST Spring |
| java/struts2/security/audit/devmode/ | Java | Struts2 | Encontra o uso de devMode |
| java/struts2/security/audit/dmi/ | Java | Struts2 | Encontra o uso de Dynamic Method Invocation |
| java/struts2/security/audit/entrypoints/ | Java | Struts2 | Encontra pontos de entrada REST Struts2 |
| java/xstream/security/audit/fromxml | Java | XStream | Encontra o uso de XStream.fromXML(...) |
| kotlin/spark/security/audit/entrypoints/ | Kotlin | Spark | Encontra pontos de entrada REST Spark |
| python/flask/security/audit/entrypoints/ | Python | Flask | Encontra pontos de entrada REST Flask |
| YAML |
| Kubernetes |
Encontra especificações de contêiner que permitem executar como root (sem runAsNonRoot), considerando o contexto de segurança do pod e do contêiner PR |
| yaml/kubernetes/security/run-as-non-root-unsafe-value | YAML | Kubernetes | Encontra especificações de contêiner que permitem explicitamente executar como root (runAsNonRoot: false), considerando o contexto de segurança do pod e do contêiner PR |