
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 |
| ID | Playground | Impacto | Confiança | Descrição |
|---|---|---|---|---|
| automatic-memory-pinning | 🛝🔗 | 🟩 | 🌘 | Memória PyTorch não fixada automaticamente |
| lxml-in-pandas | 🛝🔗 | 🟧 | 🌘 | Possíveis ataques XXE ao carregar lxml em pandas |
| msgpack-numpy | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir de funções que dependem de pickling |
| numpy-distutils | 🛝🔗 | 🟩 | 🌘 | Uso de numpy.distutils obsoleto |
| numpy-f2py-compile | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir da compilação f2py do NumPy |
| numpy-in-pytorch-datasets | 🛝🔗 |
| ID | Playground | Impacto | Confiança | Descrição |
|---|---|---|---|---|
| panic-in-function-returning-result | 🛝🔗 | 🟩 | 🌘 | Chamar unwrap ou expect em uma função que retorna um Result |
| ID | Playground | Impacto | Confiança | Descrição |
|---|---|---|---|---|
| schema-directives | 🛝🔗 | 🟥 | 🌗 | Uso da opção obsoleta do ApolloServer 'schemaDirectives' |
| use-of-graphql-upload | 🛝🔗 | 🟧 | 🌕 | Uso da biblioteca graphql-upload |
| v3-potentially-bad-cors | 🛝🔗 | 🟧 | 🌕 | Política CORS potencialmente ruim |
| v3-express-bad-cors | 🛝🔗 | 🟥 | 🌗 | Política CORS ruim |
| v3-express-no-cors | 🛝🔗 | 🟩 | 🌘 | Ausência de política CORS |
| v3-bad-cors | 🛝🔗 | 🟥 |
| ID | Playground | Impacto | Confiança | Descrição |
|---|---|---|---|---|
| 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 | Confiança | Descrição |
|---|---|---|---|---|
| amqp-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 | |
| container-privileged | 🛝🔗 | 🟥 | 🌗 | |
| container-user-root | 🛝🔗 | 🟥 | 🌗 | |
| curl-insecure | 🛝🔗 | 🟥 | 🌗 | |
| curl-unencrypted-url | 🛝🔗 | 🟥 | 🌗 | |
| gpg-insecure-flags | 🛝🔗 | 🟥 | 🌗 | |
| installer-allow-untrusted | 🛝🔗 |
| ID | Playground | Impacto | Confiança | Descrição |
|---|---|---|---|---|
| insecure-url-host-hassuffix-check | 🛝🔗 | 🌫️ | 🌘 |
Pull Requests e issues são bem-vindos!
Consulte CONTRIBUTING.md para obter mais informações.
As regras definidas neste repositório são licenciadas sob AGPLv3.
Os exemplos sidecar podem ser derivados de outras obras e mantêm suas licenças originais quando necessário.
| 🟧 |
| 🌗 |
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 |
| 🟩 |
| 🌘 |
Chamadas ao RNG do NumPy dentro de um dataset Torch |
| numpy-in-pytorch-modules | 🛝🔗 | 🌫️ | 🌗 | Usos de funções NumPy dentro de módulos PyTorch |
| numpy-load-library | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir do carregamento da biblioteca NumPy |
| onnx-session-options | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir do carregamento da biblioteca ONNX |
| pandas-eval | 🛝🔗 | 🟥 | 🌕 | Possível execução arbitrária de código a partir de funções pandas que avaliam expressões fornecidas pelo usuário |
| pickles-in-keras-deprecation | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir da função load_model do Keras |
| pickles-in-keras | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir da função load_model do Keras |
| pickles-in-numpy | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir de funções NumPy que dependem de pickling |
| pickles-in-pandas | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir de funções Pandas que dependem de pickling |
| pickles-in-pytorch-distributed | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir de funções PyTorch.Distributed que dependem de pickling |
| pickles-in-pytorch | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir de funções PyTorch que dependem de pickling |
| pickles-in-tensorflow | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir da função de carregamento do tensorflow |
| pytorch-classes-load-library | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir do carregamento da biblioteca PyTorch |
| pytorch-package | 🛝🔗 | 🟥 | 🌕 | Possível execução arbitrária de código a partir de torch.package |
| pytorch-tensor | 🛝🔗 | 🌫️ | 🌘 | Possíveis problemas de parsing e ineficiência devido à criação incorreta de tensores |
| scikit-joblib-load | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir de funções SciKit.Joblib que dependem de pickling |
| tarfile-extractall-traversal | 🛝🔗 | 🟧 | 🌗 | Possível path traversal na chamada a extractall para um tarfile |
| tensorflow-load-library | 🛝🔗 | 🟥 | 🌗 | Possível execução arbitrária de código a partir do carregamento da biblioteca TensorFlow |
| waiting-with-pytorch-distributed | 🛝🔗 | 🟩 | 🌗 | Possível comportamento indefinido do PyTorch ao não aguardar por requisições |
| 🌗 |
| Política CORS ruim |
| v3-no-cors | 🛝🔗 | 🟩 | 🌘 | Ausência de política CORS |
| v3-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Ausência de prevenção de CSRF |
| v4-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Proteção CSRF desabilitada |
| 🛝🔗 |
| 🟩 |
| 🌘 |
| 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 | 🛝🔗 | 🟥 | 🌗 |