
Coleção de regras Semgrep para análise estática de código, detecção de vulnerabilidades de segurança e aplicação de práticas de codificação segura em múltiplas linguagens.
Este repositório contém regras Semgrep desenvolvidas pela Trail of Bits e disponibilizadas ao público. Elas fazem parte dos nossos esforços contínuos de desenvolvimento e são usadas em nossas auditorias de segurança, pesquisa de vulnerabilidades e projetos internos. Elas evoluirão ao longo do tempo à medida que identificamos novas técnicas.
Visite o Testing Handbook para orientações sobre Semgrep.
A maneira mais fácil de executar as regras é executá-las a partir do registro do Semgrep. Para isso, navegue até a pasta raiz do seu projeto e execute o seguinte:```shell $ semgrep --config "p/trailofbits"
Alternativamente, você pode clonar este repositório, navegar até a pasta raiz do seu projeto e executar regras individuais usando o comando abaixo:```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
Para executar todas as regras do repositório clonado:```shell $ semgrep --config /path/to/semgrep-rules/ .
## Flags úteis
O Semgrep será executado contra todos os arquivos de código compatíveis, exceto aqueles no seu arquivo `.gitignore`. Se você quiser executar as regras em todos os arquivos e diretórios, incluindo aqueles no seu `.gitignore`, adicione a flag `--no-git-ignore`.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
Você também pode dizer ao Semgrep para ignorar arquivos e diretórios que correspondam a qualquer padrão. Por exemplo, se você quiser dizer ao Semgrep para ignorar todos os arquivos de teste Go, você pode executar o seguinte:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
Use `-o` para salvar os resultados em um arquivo:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | Playground | Impacto | Confiança | Descrição |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | Detecta tentativas de extrair informações de rastreamento de uma transação ou bloco EVM. Em aplicações de exchange ou bridge, lógica adicional deve ser implementada encapsulando esses endpoints para evitar que os valores transferidos durante call frames revertidos sejam contabilizados. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | Detecta quando o status de um recibo de transação é lido |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | Vazamentos de goroutine |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | Possível atribuição não intencional quando ocorre um erro |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | Provavelmente iteração redundante sobre um map vazio |
| missing-runlock-on-rwmutex | 🛝🔗 | 🟧 | 🌗 | Falta RUnlock em um lock RWMutex antes de retornar de uma função |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | Falta o desbloqueio do mutex antes de retornar de uma função |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | Possíveis desreferências de nil |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | Chamadas concorrentes a append a partir de múltiplas goroutines |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | Escritas concorrentes no mesmo map em múltiplas goroutines |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | Possível implementação incorreta da interface ServerCodec |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | Underflows de inteiros |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | Cópia de sync.Mutex via value receivers |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 | |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 | |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | Uso de função vulnerável a ataques de sequestro de DLL |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | Chamadas a sync.WaitGroup.Add dentro de goroutines anônimas |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | Chamadas a sync.WaitGroup.Wait dentro de um loop |