
Raccolta di regole Semgrep per l'analisi statica del codice, il rilevamento delle vulnerabilità di sicurezza e l'applicazione di pratiche di codifica sicura in più linguaggi.
Questo repository contiene regole Semgrep sviluppate da Trail of Bits e rese disponibili al pubblico. Fanno parte dei nostri sforzi di sviluppo in corso e vengono utilizzate nei nostri audit di sicurezza, nella ricerca di vulnerabilità e nei progetti interni. Si evolveranno nel tempo man mano che individueremo nuove tecniche.
Visita il Testing Handbook per una guida su Semgrep.
Il modo più semplice per eseguire le regole è eseguirle dal Semgrep registry. Per farlo, vai alla cartella root del tuo progetto ed esegui il seguente comando:```shell $ semgrep --config "p/trailofbits"
In alternativa, puoi clonare questo repository, spostarti nella cartella principale del tuo progetto ed eseguire singole regole usando il comando qui sotto :```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
Per eseguire tutte le regole dal repository clonato:```shell $ semgrep --config /path/to/semgrep-rules/ .
## Flag utili
Semgrep verrà eseguito su tutti i file di codice supportati tranne quelli nel tuo file `.gitignore`. Se vuoi eseguire le regole su tutti i file e le directory, inclusi quelli nel tuo `.gitignore`, aggiungi il flag `--no-git-ignore`.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
Puoi anche dire a Semgrep di ignorare file e directory che corrispondono a qualsiasi pattern. Ad esempio, se vuoi dire a Semgrep di ignorare tutti i file di test Go, puoi eseguire il seguente comando:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
Usa `-o` per inviare i risultati a un file:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | Playground | Impatto | Confidenza | Descrizione |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | Rileva i tentativi di estrarre informazioni di trace da una transazione o da un blocco EVM. Nelle applicazioni di exchange o bridge, è necessario implementare una logica aggiuntiva che incapsuli questi endpoint per evitare che i valori trasferiti durante i frame di chiamata ripristinati vengano conteggiati. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | Rileva quando viene letto lo stato di una ricevuta di transazione |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | Perdite di goroutine |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | Possibile assegnazione involontaria quando si verifica un errore |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | Probabile iterazione ridondante su una mappa vuota |
| missing-runlock-on-rwmutex |
| ID | Playground | Impatto | Confidenza | Descrizione |
|---|---|---|---|---|
| automatic-memory-pinning | 🛝🔗 | 🟩 | 🌘 | Memoria PyTorch non bloccata automaticamente |
| lxml-in-pandas | 🛝🔗 | 🟧 | 🌘 | Potenziali attacchi XXE dal caricamento di lxml in pandas |
| msgpack-numpy | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice da funzioni che dipendono dal pickling |
| numpy-distutils | 🛝🔗 | 🟩 | 🌘 | Uso di numpy.distutils deprecato |
| numpy-f2py-compile | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice dalla compilazione f2py di NumPy |
| numpy-in-pytorch-datasets | 🛝🔗 |
| ID | Playground | Impatto | Confidenza | Descrizione |
|---|---|---|---|---|
| panic-in-function-returning-result | 🛝🔗 | 🟩 | 🌘 | Chiamata a unwrap o expect in una funzione che restituisce un Result |
| ID | Playground | Impatto | Confidenza | Descrizione |
|---|---|---|---|---|
| schema-directives | 🛝🔗 | 🟥 | 🌗 | Uso dell'opzione obsoleta 'schemaDirectives' di ApolloServer |
| use-of-graphql-upload | 🛝🔗 | 🟧 | 🌕 | Uso della libreria graphql-upload |
| v3-potentially-bad-cors | 🛝🔗 | 🟧 | 🌕 | Politica CORS potenzialmente non sicura |
| v3-express-bad-cors | 🛝🔗 | 🟥 | 🌗 | Politica CORS non sicura |
| v3-express-no-cors | 🛝🔗 | 🟩 | 🌘 | Assenza di una politica CORS |
| v3-bad-cors | 🛝🔗 | 🟥 |
| ID | Playground | Impatto | Confidenza | Descrizione |
|---|---|---|---|---|
| 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 | Impatto | Confidenza | Descrizione |
|---|---|---|---|---|
| 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 | Impatto | Confidenza | Descrizione |
|---|---|---|---|---|
| amqp-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 | |
| container-privileged | 🛝🔗 | 🟥 | 🌗 | |
| container-user-root | 🛝🔗 | 🟥 | 🌗 | |
| curl-insecure | 🛝🔗 | 🟥 | 🌗 | |
| curl-unencrypted-url | 🛝🔗 | 🟥 | 🌗 | |
| gpg-insecure-flags | 🛝🔗 | 🟥 | 🌗 | |
| installer-allow-untrusted | 🛝🔗 |
| ID | Playground | Impatto | Confidenza | Descrizione |
|---|---|---|---|---|
| insecure-url-host-hassuffix-check | 🛝🔗 | 🌫️ | 🌘 |
Le Pull Request e le issue sono benvenute!
Vedi CONTRIBUTING.md per maggiori informazioni.
Le regole definite in questo repository sono distribuite sotto licenza AGPLv3.
Gli esempi sidecar potrebbero essere derivati da altre opere e mantengono le loro licenze originali dove richiesto.
| 🛝🔗 |
| 🟧 |
| 🌗 |
Manca RUnlock su un lock RWMutex prima di restituire il controllo da una funzione |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | Manca lo sblocco del mutex prima di ritornare da una funzione |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | Possibili dereferenziamenti di nil |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | Chiamate concorrenti ad append da più goroutine |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | Scritture concorrenti sulla stessa mappa in più goroutine |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | Possibile implementazione non corretta dell'interfaccia ServerCodec |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | Underflow di interi |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | Copia di sync.Mutex tramite ricevitori per valore |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | Uso di una funzione vulnerabile ad attacchi di hijacking di DLL |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | Chiamate a sync.WaitGroup.Add all'interno di goroutine anonime |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | Chiamate a sync.WaitGroup.Wait all'interno di un ciclo |
| 🟩 |
| 🌘 |
Chiamate al RNG di NumPy all'interno di un dataset Torch |
| numpy-in-pytorch-modules | 🛝🔗 | 🌫️ | 🌗 | Usi di funzioni NumPy all'interno di moduli PyTorch |
| numpy-load-library | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice dal caricamento della libreria NumPy |
| onnx-session-options | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice dal caricamento della libreria ONNX |
| pandas-eval | 🛝🔗 | 🟥 | 🌕 | Potenziale esecuzione arbitraria di codice da funzioni pandas che valutano espressioni fornite dall'utente |
| pickles-in-keras-deprecation | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice dalla funzione load_model di Keras |
| pickles-in-keras | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice dalla funzione load_model di Keras |
| pickles-in-numpy | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice da funzioni NumPy che dipendono dal pickling |
| pickles-in-pandas | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice da funzioni Pandas che dipendono dal pickling |
| pickles-in-pytorch-distributed | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice da funzioni PyTorch.Distributed che dipendono dal pickling |
| pickles-in-pytorch | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice da funzioni PyTorch che dipendono dal pickling |
| pickles-in-tensorflow | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice dalla funzione load di tensorflow |
| pytorch-classes-load-library | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice dal caricamento della libreria PyTorch |
| pytorch-package | 🛝🔗 | 🟥 | 🌕 | Potenziale esecuzione arbitraria di codice da torch.package |
| pytorch-tensor | 🛝🔗 | 🌫️ | 🌘 | Possibili problemi di parsing e inefficienza derivanti da una creazione impropria di tensori |
| scikit-joblib-load | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice da funzioni SciKit.Joblib che dipendono dal pickling |
| tarfile-extractall-traversal | 🛝🔗 | 🟧 | 🌗 | Potenziale path traversal nella chiamata a extractall per un tarfile |
| tensorflow-load-library | 🛝🔗 | 🟥 | 🌗 | Potenziale esecuzione arbitraria di codice dal caricamento della libreria TensorFlow |
| waiting-with-pytorch-distributed | 🛝🔗 | 🟩 | 🌗 | Possibile comportamento indefinito di PyTorch quando non si attendono le richieste |
| 🌗 |
| Politica CORS non sicura |
| v3-no-cors | 🛝🔗 | 🟩 | 🌘 | Assenza di una politica CORS |
| v3-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Mancanza di prevenzione CSRF |
| v4-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Protezione CSRF disabilitata |
| 🛝🔗 |
| 🟩 |
| 🌘 |
| 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 | 🛝🔗 | 🟥 | 🌗 |