
Colección de reglas de Semgrep para análisis estático de código, detección de vulnerabilidades de seguridad y aplicación de prácticas de codificación segura en múltiples lenguajes.
Este repositorio contiene reglas de Semgrep desarrolladas por Trail of Bits y puestas a disposición del público. Forman parte de nuestros esfuerzos de desarrollo continuo y se utilizan en nuestras auditorías de seguridad, investigación de vulnerabilidades y proyectos internos. Evolucionarán con el tiempo a medida que identifiquemos nuevas técnicas.
Visita el Manual de pruebas para obtener orientación sobre Semgrep.
La forma más fácil de ejecutar las reglas es hacerlo desde el registro de Semgrep. Para ello, navega a la carpeta raíz de tu proyecto y ejecuta lo siguiente:```shell $ semgrep --config "p/trailofbits"
Alternativamente, puedes clonar este repositorio, navegar a la carpeta raíz de tu proyecto y ejecutar reglas individuales usando el siguiente comando :```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
Para ejecutar todas las reglas desde el repositorio clonado:```shell $ semgrep --config /path/to/semgrep-rules/ .
## Banderas útiles
Semgrep se ejecutará contra todos los archivos de código compatibles excepto los que estén en tu archivo `.gitignore`. Si quieres ejecutar las reglas contra todos los archivos y directorios, incluidos los que están en tu `.gitignore`, añade la bandera `--no-git-ignore`.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
También puedes indicarle a Semgrep que ignore archivos y directorios que coincidan con cualquier patrón. Por ejemplo, si quieres decirle a Semgrep que ignore todos los archivos de prueba de Go, puedes ejecutar lo siguiente:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
Usa `-o` para escribir los resultados en un archivo:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | Playground | Impacto | Confianza | Descripción |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | Detecta intentos de extraer información de trazas de una transacción o bloque EVM. En aplicaciones de intercambio o puentes, se debe implementar lógica adicional que encapsule estos endpoints para evitar que se cuenten los valores transferidos durante marcos de llamada revertidos. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | Detecta cuando se lee el estado de un recibo de transacción |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | Fugas de goroutines |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | Posible asignación involuntaria cuando ocurre un error |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | Iteración probablemente redundante sobre un mapa vacío |
| missing-runlock-on-rwmutex |
| ID | Playground | Impacto | Confianza | Descripción |
|---|---|---|---|---|
| automatic-memory-pinning | 🛝🔗 | 🟩 | 🌘 | Memoria de PyTorch no fijada automáticamente |
| lxml-in-pandas | 🛝🔗 | 🟧 | 🌘 | Posibles ataques XXE al cargar lxml en pandas |
| msgpack-numpy | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde funciones que dependen de pickling |
| numpy-distutils | 🛝🔗 | 🟩 | 🌘 | Uso de numpy.distutils obsoleto |
| numpy-f2py-compile | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde la compilación f2py de NumPy |
| numpy-in-pytorch-datasets | 🛝🔗 |
| ID | Playground | Impacto | Confianza | Descripción |
|---|---|---|---|---|
| panic-in-function-returning-result | 🛝🔗 | 🟩 | 🌘 | Llamar a unwrap o expect en una función que retorna un Result |
| ID | Playground | Impacto | Confianza | Descripción |
|---|---|---|---|---|
| schema-directives | 🛝🔗 | 🟥 | 🌗 | Uso de la opción obsoleta 'schemaDirectives' de ApolloServer |
| use-of-graphql-upload | 🛝🔗 | 🟧 | 🌕 | Uso de la biblioteca graphql-upload |
| v3-potentially-bad-cors | 🛝🔗 | 🟧 | 🌕 | Política CORS potencialmente deficiente |
| v3-express-bad-cors | 🛝🔗 | 🟥 | 🌗 | Política CORS incorrecta |
| v3-express-no-cors | 🛝🔗 | 🟩 | 🌘 | Falta de política CORS |
| v3-bad-cors | 🛝🔗 | 🟥 |
| ID | Playground | Impacto | Confianza | Descripción |
|---|---|---|---|---|
| docker-hardcoded-password | 🛝🔗 | 🟥 | 🌘 | |
| docker-privileged-mode | 🛝🔗 | 🟩 | 🌘 | |
| podman-tls-verify-disabled | 🛝🔗 | 🟩 | 🌘 | |
| root-user | 🛝🔗 | 🟩 | 🌘 | |
| tls-hostname-verification-disabled | 🛝🔗 | 🟥 | 🌘 | |
| aws-oidc-role-policy-duplicate-condition | 🛝🔗 | 🟥 | 🌘 | |
| aws-oidc-role-policy-missing-sub |
| ID | Playground | Impacto | Confianza | Descripción |
|---|---|---|---|---|
| gc-call | 🛝🔗 | 🟩 | 🌘 | |
| mongo-hostname-verification-disabled | 🛝🔗 | 🟥 | 🌘 |
| -- | :--------: | :----: | :--------: | ----------- | | apt-key-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | apt-key-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | apt-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | dnf-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | dnf-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | get-url-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | get-url-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | rpm-key-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | rpm-key-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | unarchive-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | unarchive-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | wrm-cert-validation-ignore | 🛝🔗 | 🟥 | 🌘 | | | yum-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | yum-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | zypper-repository-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | zypper-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | port-all-interfaces | 🛝🔗 | 🟩 | 🌕 | | | aws-secret-key | 🛝🔗 | 🟧 | 🌘 | | | azure-principal-secret | 🛝🔗 | 🟧 | 🌘 | | | gcp-credentials-json | 🛝🔗 | 🟧 | 🌘 | | | jfrog-hardcoded-credential | 🛝🔗 | 🟧 | 🌘 | | | pypi-publish-password | 🛝🔗 | 🟧 | 🌘 | | | rubygems-publish-key | 🛝🔗 | 🟧 | 🌘 | | | vault-token | 🛝🔗 | 🟧 | 🌘 | |
| ID | Playground | Impacto | Confianza | Descripción |
|---|---|---|---|---|
| amqp-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 | |
| container-privileged | 🛝🔗 | 🟥 | 🌗 | |
| container-user-root | 🛝🔗 | 🟥 | 🌗 | |
| curl-insecure | 🛝🔗 | 🟥 | 🌗 | |
| curl-unencrypted-url | 🛝🔗 | 🟥 | 🌗 | |
| gpg-insecure-flags | 🛝🔗 | 🟥 | 🌗 | |
| installer-allow-untrusted | 🛝🔗 |
| ID | Playground | Impacto | Confianza | Descripción |
|---|---|---|---|---|
| insecure-url-host-hassuffix-check | 🛝🔗 | 🌫️ | 🌘 |
¡Las pull requests y los issues son bienvenidos!
Consulta CONTRIBUTING.md para más información.
Las reglas definidas en este repositorio están licenciadas bajo AGPLv3.
Los ejemplos sidecar pueden derivarse de otras obras y conservan sus licencias originales cuando corresponde.
| 🟧 |
| 🌗 |
Falta RUnlock en un bloqueo RWMutex antes de retornar de una función |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | Falta desbloquear el mutex antes de retornar de una función |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | Posibles desreferencias de nil |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | Llamadas concurrentes a append desde múltiples goroutines |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | Escrituras concurrentes al mismo mapa en múltiples goroutines |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | Posible implementación incorrecta de la interfaz ServerCodec |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | Subdesbordamientos de enteros |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | Copia de sync.Mutex mediante receptores de valor |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | Uso de una función vulnerable a ataques de secuestro de DLL |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | Llamadas a sync.WaitGroup.Add dentro de goroutines anónimas |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | Llamadas a sync.WaitGroup.Wait dentro de un bucle |
| 🟩 |
| 🌘 |
Llamadas al RNG de NumPy dentro de un dataset de Torch |
| numpy-in-pytorch-modules | 🛝🔗 | 🌫️ | 🌗 | Usos de funciones de NumPy dentro de módulos de PyTorch |
| numpy-load-library | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde la carga de la biblioteca NumPy |
| onnx-session-options | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde la carga de la biblioteca ONNX |
| pandas-eval | 🛝🔗 | 🟥 | 🌕 | Posible ejecución arbitraria de código desde funciones de pandas que evalúan expresiones proporcionadas por el usuario |
| pickles-in-keras-deprecation | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde la función load_model de Keras |
| pickles-in-keras | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde la función load_model de Keras |
| pickles-in-numpy | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde funciones de NumPy que dependen de pickling |
| pickles-in-pandas | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde funciones de Pandas que dependen de pickling |
| pickles-in-pytorch-distributed | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde funciones de PyTorch.Distributed que dependen de pickling |
| pickles-in-pytorch | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde funciones de PyTorch que dependen de pickling |
| pickles-in-tensorflow | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde la función load de tensorflow |
| pytorch-classes-load-library | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde la carga de la biblioteca PyTorch |
| pytorch-package | 🛝🔗 | 🟥 | 🌕 | Posible ejecución arbitraria de código desde torch.package |
| pytorch-tensor | 🛝🔗 | 🌫️ | 🌘 | Posibles problemas de análisis e ineficiencia por creación incorrecta de tensores |
| scikit-joblib-load | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde funciones de SciKit.Joblib que dependen de pickling |
| tarfile-extractall-traversal | 🛝🔗 | 🟧 | 🌗 | Posible path traversal en la llamada a extractall para un tarfile |
| tensorflow-load-library | 🛝🔗 | 🟥 | 🌗 | Posible ejecución arbitraria de código desde la carga de la biblioteca TensorFlow |
| waiting-with-pytorch-distributed | 🛝🔗 | 🟩 | 🌗 | Posible comportamiento indefinido de PyTorch cuando no se esperan las solicitudes |
| 🌗 |
| Política CORS incorrecta |
| v3-no-cors | 🛝🔗 | 🟩 | 🌘 | Falta de política CORS |
| v3-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Falta de prevención de CSRF |
| v4-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Protección CSRF deshabilitada |
| 🛝🔗 |
| 🟩 |
| 🌘 |
| json-create-deserialization | 🛝🔗 | 🟥 | 🌕 |
| rails-cache-store-marshal | 🛝🔗 | 🟩 | 🌗 |
| rails-cookie-attributes | 🛝🔗 | 🟩 | 🌘 |
| rails-params-json | 🛝🔗 | 🟥 | 🌕 |
| rest-client-disable-verification | 🛝🔗 | 🟥 | 🌘 |
| ruby-saml-skip-validation | 🛝🔗 | 🟧 | 🌘 |
| yaml-unsafe-load | 🛝🔗 | 🟥 | 🌘 |
| 🛝🔗 |
| 🟥 |
| 🌘 |
| vault-hardcoded-token | 🛝🔗 | 🟥 | 🌘 |
| vault-skip-tls-verify | 🛝🔗 | 🟥 | 🌘 |
| 🟥 |
| 🌘 |
| mongodb-insecure-transport | 🛝🔗 | 🟥 | 🌘 |
| mysql-insecure-sslmode | 🛝🔗 | 🟥 | 🌗 |
| node-disable-certificate-validation | 🛝🔗 | 🟥 | 🌘 |
| openssl-insecure-flags | 🛝🔗 | 🟥 | 🌗 |
| postgres-insecure-sslmode | 🛝🔗 | 🟥 | 🌘 |
| redis-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 |
| ssh-disable-host-key-checking | 🛝🔗 | 🟥 | 🌗 |
| tar-insecure-flags | 🛝🔗 | 🟥 | 🌗 |
| wget-no-check-certificate | 🛝🔗 | 🟥 | 🌗 |
| wget-unencrypted-url | 🛝🔗 | 🟥 | 🌗 |