
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 | 🛝🔗 | 🟧 | 🌗 | 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 |