
Reglas de análisis estático de seguridad para la detección de vulnerabilidades y revisión de código centrada en auditorías en Java, Go, Python, C#, Kotlin, PHP, Kubernetes y GitHub Actions.
Bienvenido al repositorio público de reglas semgrep de elttam.

Desarrollamos reglas regularmente durante nuestras auditorías de seguridad asistidas por código y nuestra investigación en seguridad de software. Añadiremos con frecuencia nuevas reglas y mejoraremos lo que hay aquí para la comunidad de semgrep. ¡Esperamos que los ingenieros de seguridad de producto y los auditores de código que usan semgrep las encuentren útiles!
Si encuentras algún error, por favor abre un issue en GitHub.
Esta guía asume que estás familiarizado con Semgrep y que ya lo tienes instalado.
Este repositorio ha dividido las reglas en dos amplias categorías:
rules/ -- Reglas útiles para desarrolladores o equipos de AppSec; generalmente se trata de vulnerabilidades.rules-audit/ -- Reglas útiles para auditar código fuente, identificar comportamientos interesantes y enumerar puntos de entrada, con el fin de complementar la revisión manual del código fuente.Prueba este repositorio con el siguiente comando:
git clone https://github.com/elttam/semgrep-rules.git
Para probar las reglas, ejecuta:
semgrep --config semgrep-rules/rules semgrep-rules/rules/
Para probar las reglas centradas en auditoría, ejecuta:
semgrep --config semgrep-rules/rules-audit semgrep-rules/rules-audit/
Estas reglas están centradas en identificar vulnerabilidades u otras debilidades.
| Ruta de la regla | Lenguaje | Tecnología | Descripción |
|---|---|---|---|
| generic/jsp-likely-xss | Generic | JSP | Detecta XSS con renderizado inseguro en la plantilla |
| go/lang/security/audit/executable-symlink | Go | Posible secuestro de symlink con os.Executable | |
| go/lang/security/audit/sprintf-plain-string | Go | Sprintf con caracteres de control sin escapar | |
| go/lang/security/audit/uintptr-nonatomic | Go | Uso no atómico de uintptr convertido | |
| java/lang/security/audit/crypto/gcm-static-iv | Java | Encuentra GCM que usa los mismos valores para la clave y el IV | |
| java/lang/security/audit/crypto/randomstringutils | Java | Apache Commons | Encuentra RandomStringUtils que usa java.util.Random por defecto, lo cual no es adecuado para seguridad |
| java/spring/security/audit/remoting/ | Java | Spring | Encuentra el uso de Spring Remoting |
| php/php-filter-chain-read-from-oracle | PHP | Detecta un posible oráculo de error basado en cadenas de filtros de PHP | |
| yaml/github-actions/security/save-state | YAML | Github-Actions | Encuentra el uso del comando ::save-state inseguro y obsoleto |
| yaml/github-actions/security/set-output | YAML | Github-Actions | Encuentra el uso del comando ::set-output inseguro y obsoleto |
| yaml/kubernetes/audit/network-policy-ingress-any | YAML | Kubernetes | Encuentra especificaciones de contenedores con NetworkPolicy que tengan Ingress Permit ANY |
| yaml/kubernetes/audit/privileged-container | YAML | Kubernetes | Encuentra especificaciones de contenedores con contexto de seguridad privilegiado |
| yaml/kubernetes/security/allow-privileged-escalation | YAML | Kubernetes | Encuentra especificaciones de contenedores, incluidos los contenedores init, que permiten la escalada de privilegios (allowPrivilegeEscalation) |
| yaml/kubernetes/security/no-security-context | YAML | Kubernetes | Encuentra especificaciones de contenedores sin contexto de seguridad; considera el contexto de seguridad del pod o del contenedor. |
Estas reglas son útiles para ayudar en la revisión manual del código fuente, identificando comportamientos interesantes o enumerando puntos de entrada.
| Ruta de la regla | Lenguaje | Tecnología | Descripción |
|---|---|---|---|
| c/lang/security/audit/exec | C | Encuentra la ejecución de procesos | |
| csharp/dotnet/security/audit/entrypoints/apsnet-controller | C# | ASP.NET | Encuentra puntos de entrada REST de ASP.NET |
| java/jackson/polymorphic-typing | Java | Jackson | Encuentra tipado polimórfico para ayudar a identificar problemas vulnerables de deserialización en Jackson. |
| java/jackson/type-resolver-override | Java | Jackson | Encuentra tipado polimórfico usando TypeResolveBuilder |
| java/jax-rs/security/audit/entrypoints/ | Java | JAX-RS | Encuentra puntos de entrada REST de JAX-RS |
| java/lang/security/audit/processbuilder | Java | Encuentra la ejecución de procesos con ProcessBuilder | |
| java/spring/security/audit/entrypoints/ | Java | Spring | Encuentra puntos de entrada REST de Spring |
| java/struts2/security/audit/devmode/ | Java | Struts2 | Encuentra el uso de devMode |
| java/struts2/security/audit/dmi/ | Java | Struts2 | Encuentra el uso de Dynamic Method Invocation |
| java/struts2/security/audit/entrypoints/ | Java | Struts2 | Encuentra puntos de entrada REST de Struts2 |
| java/xstream/security/audit/fromxml | Java | XStream | Encuentra el uso de XStream.fromXML(...) |
| kotlin/spark/security/audit/entrypoints/ | Kotlin | Spark | Encuentra puntos de entrada REST de Spark |
| python/flask/security/audit/entrypoints/ | Python | Flask | Encuentra puntos de entrada REST de Flask |
| yaml/kubernetes/security/run-as-non-root | YAML | Kubernetes | Encuentra especificaciones de contenedores que permiten ejecutarse como root (falta runAsNonRoot); considera el contexto de seguridad del pod y del contenedor PR |
| yaml/kubernetes/security/run-as-non-root-unsafe-value | YAML | Kubernetes | Encuentra especificaciones de contenedores que permiten explícitamente ejecutarse como root (runAsNonRoot: false); considera el contexto de seguridad del pod y del contenedor PR |