
Collection de règles Semgrep pour l'analyse statique de code, la détection de vulnérabilités de sécurité et l'application de pratiques de codage sécurisé dans plusieurs langages.
Ce dépôt contient des règles Semgrep développées par Trail of Bits et mises à la disposition du public. Elles font partie de nos efforts de développement continus et sont utilisées dans nos audits de sécurité, nos recherches de vulnérabilités et nos projets internes. Elles évolueront au fil du temps à mesure que nous identifierons de nouvelles techniques.
Consultez le Testing Handbook pour des conseils sur Semgrep.
Le moyen le plus simple d'exécuter les règles est de les lancer depuis le registre Semgrep. Pour ce faire, accédez au dossier racine de votre projet et exécutez la commande suivante :```shell $ semgrep --config "p/trailofbits"
Vous pouvez également cloner ce dépôt, naviguer vers le dossier racine de votre projet et exécuter des règles individuelles à l'aide de la commande ci-dessous :```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
Pour exécuter toutes les règles à partir du dépôt cloné:```shell $ semgrep --config /path/to/semgrep-rules/ .
## Options utiles
Semgrep s'exécutera sur tous les fichiers de code pris en charge, à l'exception de ceux présents dans votre fichier `.gitignore`. Si vous souhaitez exécuter les règles sur tous les fichiers et répertoires, y compris ceux de votre `.gitignore`, ajoutez l'option `--no-git-ignore`.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
Vous pouvez également demander à Semgrep d'ignorer les fichiers et répertoires qui correspondent à n'importe quel motif. Par exemple, si vous souhaitez demander à Semgrep d'ignorer tous les fichiers de test Go, vous pouvez exécuter ce qui suit :```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
Utilisez `-o` pour écrire les résultats dans un fichier:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | Playground | Impact | Confiance | Description |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | Détecte les tentatives d'extraction d'informations de trace à partir d'une transaction ou d'un bloc EVM. Dans les applications d'échange ou de pont, une logique supplémentaire doit être implémentée pour encapsuler ces points de terminaison afin d'éviter que les valeurs transférées lors de frames d'appel annulées soient comptabilisées. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | Détecte quand le statut d'un reçu de transaction est lu |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | Fuites de goroutines |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | Affectation potentiellement non intentionnelle lorsqu'une erreur se produit |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | Itération probablement redondante sur une map vide |
| missing-runlock-on-rwmutex |
| ID | Playground | Impact | Confiance | Description |
|---|---|---|---|---|
| automatic-memory-pinning | 🛝🔗 | 🟩 | 🌘 | Mémoire PyTorch non épinglée automatiquement |
| lxml-in-pandas | 🛝🔗 | 🟧 | 🌘 | Attaques XXE potentielles liées au chargement de lxml dans pandas |
| msgpack-numpy | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de fonctions dépendant du pickling |
| numpy-distutils | 🛝🔗 | 🟩 | 🌘 | Utilisation de numpy.distutils obsolète |
| numpy-f2py-compile | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de la compilation f2py de NumPy |
| numpy-in-pytorch-datasets | 🛝🔗 |
| ID | Playground | Impact | Confiance | Description |
|---|---|---|---|---|
| panic-in-function-returning-result | 🛝🔗 | 🟩 | 🌘 | Appel de unwrap ou expect dans une fonction retournant un Result |
| ID | Playground | Impact | Confiance | Description |
|---|---|---|---|---|
| schema-directives | 🛝🔗 | 🟥 | 🌗 | Utilisation de l'option ApolloServer obsolète 'schemaDirectives' |
| use-of-graphql-upload | 🛝🔗 | 🟧 | 🌕 | Utilisation de la bibliothèque graphql-upload |
| v3-potentially-bad-cors | 🛝🔗 | 🟧 | 🌕 | Politique CORS potentiellement incorrecte |
| v3-express-bad-cors | 🛝🔗 | 🟥 | 🌗 | Politique CORS incorrecte |
| v3-express-no-cors | 🛝🔗 | 🟩 | 🌘 | Absence de politique CORS |
| v3-bad-cors | 🛝🔗 |
| ID | Playground | Impact | Confiance | Description |
|---|---|---|---|---|
| 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 | Impact | Confiance | Description |
|---|---|---|---|---|
| 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 | Impact | Confiance | Description |
|---|---|---|---|---|
| amqp-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 | |
| container-privileged | 🛝🔗 | 🟥 | 🌗 | |
| container-user-root | 🛝🔗 | 🟥 | 🌗 | |
| curl-insecure | 🛝🔗 | 🟥 | 🌗 | |
| curl-unencrypted-url | 🛝🔗 | 🟥 | 🌗 | |
| gpg-insecure-flags | 🛝🔗 | 🟥 | 🌗 | |
| installer-allow-untrusted | 🛝🔗 |
| ID | Playground | Impact | Confiance | Description |
|---|---|---|---|---|
| insecure-url-host-hassuffix-check | 🛝🔗 | 🌫️ | 🌘 |
Les pull requests et les issues sont les bienvenues !
Voir CONTRIBUTING.md pour plus d'informations.
Les règles définies dans ce dépôt sont sous licence AGPLv3.
Les exemples sidecar peuvent être dérivés d'autres travaux et conservent leurs licences d'origine lorsque cela est requis.
| 🛝🔗 |
| 🟧 |
| 🌗 |
RUnlock manquant sur un verrou RWMutex avant de retourner d'une fonction |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | Déverrouillage de mutex manquant avant de retourner d'une fonction |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | Déréférencements nuls possibles |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | Appels concurrents à append depuis plusieurs goroutines |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | Écritures concurrentes dans la même map depuis plusieurs goroutines |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | Implémentation d'interface ServerCodec potentiellement incorrecte |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | Sous-dépassements d'entiers |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | Copie de sync.Mutex via des récepteurs de valeur |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | Utilisation d'une fonction vulnérable aux attaques de détournement de DLL |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | Appels à sync.WaitGroup.Add à l'intérieur de goroutines anonymes |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | Appels à sync.WaitGroup.Wait à l'intérieur d'une boucle |
| 🟩 |
| 🌘 |
Appels au RNG NumPy à l'intérieur d'un jeu de données Torch |
| numpy-in-pytorch-modules | 🛝🔗 | 🌫️ | 🌗 | Utilisations de fonctions NumPy à l'intérieur de modules PyTorch |
| numpy-load-library | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir du chargement de la bibliothèque NumPy |
| onnx-session-options | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir du chargement de la bibliothèque ONNX |
| pandas-eval | 🛝🔗 | 🟥 | 🌕 | Exécution de code arbitraire potentielle à partir de fonctions pandas qui évaluent des expressions fournies par l'utilisateur |
| pickles-in-keras-deprecation | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de la fonction load_model de Keras |
| pickles-in-keras | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de la fonction load_model de Keras |
| pickles-in-numpy | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de fonctions NumPy dépendant du pickling |
| pickles-in-pandas | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de fonctions Pandas dépendant du pickling |
| pickles-in-pytorch-distributed | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de fonctions PyTorch.Distributed dépendant du pickling |
| pickles-in-pytorch | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de fonctions PyTorch dépendant du pickling |
| pickles-in-tensorflow | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de la fonction de chargement de tensorflow |
| pytorch-classes-load-library | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir du chargement de la bibliothèque PyTorch |
| pytorch-package | 🛝🔗 | 🟥 | 🌕 | Exécution de code arbitraire potentielle à partir de torch.package |
| pytorch-tensor | 🛝🔗 | 🌫️ | 🌘 | Problèmes d'analyse et inefficacité possibles dus à une création de tenseur inappropriée |
| scikit-joblib-load | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir de fonctions SciKit.Joblib dépendant du pickling |
| tarfile-extractall-traversal | 🛝🔗 | 🟧 | 🌗 | Traversée de chemin potentielle dans l'appel à extractall pour un tarfile |
| tensorflow-load-library | 🛝🔗 | 🟥 | 🌗 | Exécution de code arbitraire potentielle à partir du chargement de la bibliothèque TensorFlow |
| waiting-with-pytorch-distributed | 🛝🔗 | 🟩 | 🌗 | Comportement indéfini PyTorch possible lorsqu'on n'attend pas les requêtes |
| 🟥 |
| 🌗 |
| Politique CORS incorrecte |
| v3-no-cors | 🛝🔗 | 🟩 | 🌘 | Absence de politique CORS |
| v3-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Absence de prévention CSRF |
| v4-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Protection CSRF désactivée |
| 🛝🔗 |
| 🟩 |
| 🌘 |
| 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 | 🛝🔗 | 🟥 | 🌗 |