
Sammlung von Semgrep-Regeln für die statische Codeanalyse, zur Erkennung von Sicherheitsschwachstellen und zur Durchsetzung sicherer Codierungspraktiken über mehrere Sprachen hinweg.
Dieses Repository enthält Semgrep-Regeln, die von Trail of Bits entwickelt und der Öffentlichkeit zur Verfügung gestellt wurden. Sie sind Teil unserer laufenden Entwicklungsarbeiten und werden in unseren Sicherheitsaudits, der Schwachstellenforschung und internen Projekten eingesetzt. Sie werden sich im Laufe der Zeit weiterentwickeln, wenn wir neue Techniken identifizieren.
Besuchen Sie das Testhandbuch für Semgrep-Anleitungen.
Der einfachste Weg, die Regeln auszuführen, besteht darin, sie über die Semgrep-Registry auszuführen. Navigieren Sie dazu zum Stammordner Ihres Projekts und führen Sie Folgendes aus:```shell $ semgrep --config "p/trailofbits"
Alternativ können Sie dieses Repository klonen, zum Stammordner Ihres Projekts navigieren und einzelne Regeln mit dem folgenden Befehl ausführen :```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
Um alle Regeln aus dem geklonten Repository auszuführen:```shell $ semgrep --config /path/to/semgrep-rules/ .
## Nützliche Flags
Semgrep wird gegen alle unterstützten Codedateien ausgeführt, mit Ausnahme derjenigen in Ihrer `.gitignore`-Datei. Wenn Sie die Regeln gegen alle Dateien und Verzeichnisse ausführen möchten, einschließlich derer in Ihrer `.gitignore`, fügen Sie das Flag `--no-git-ignore` hinzu.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
Sie können Semgrep auch anweisen, Dateien und Verzeichnisse zu ignorieren, die einem beliebigen Muster entsprechen. Wenn Sie Semgrep beispielsweise anweisen möchten, alle Go-Testdateien zu ignorieren, können Sie Folgendes ausführen:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
Verwenden Sie `-o`, um Ergebnisse in eine Datei auszugeben:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | Playground | Impact | Confidence | Description |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | Erkennt Versuche, Trace-Informationen aus einer EVM-Transaktion oder einem Block zu extrahieren. In Exchange- oder Bridge-Anwendungen muss zusätzliche Logik implementiert werden, die diese Endpunkte kapselt, um zu verhindern, dass die während revertierter Call-Frames übertragenen Werte gezählt werden. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | Erkennt, wenn der Status einer Transaktionsquittung gelesen wird |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | Goroutine-Leaks |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | Mögliche unbeabsichtigte Zuweisung bei Auftreten eines Fehlers |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | Wahrscheinlich redundante Iteration über eine leere Map |
| missing-runlock-on-rwmutex |
| ID | Playground | Impact | Confidence | Description |
|---|---|---|---|---|
| automatic-memory-pinning | 🛝🔗 | 🟩 | 🌘 | PyTorch-Speicher wird nicht automatisch gepinnt |
| lxml-in-pandas | 🛝🔗 | 🟧 | 🌘 | Potenzielle XXE-Angriffe durch das Laden von lxml in pandas |
| msgpack-numpy | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch Funktionen, die auf Pickling angewiesen sind |
| numpy-distutils | 🛝🔗 | 🟩 | 🌘 | Verwendung des veralteten numpy.distutils |
| numpy-f2py-compile | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch NumPy-f2py-Kompilierung |
| numpy-in-pytorch-datasets | 🛝🔗 |
| ID | Playground | Impact | Confidence | Description |
|---|---|---|---|---|
| panic-in-function-returning-result | 🛝🔗 | 🟩 | 🌘 | Aufruf von unwrap oder expect in einer Funktion, die ein Result zurückgibt |
| ID | Playground | Impact | Confidence | Description |
|---|---|---|---|---|
| schema-directives | 🛝🔗 | 🟥 | 🌗 | Verwendung der veralteten ApolloServer-Option 'schemaDirectives' |
| use-of-graphql-upload | 🛝🔗 | 🟧 | 🌕 | Verwendung der Bibliothek graphql-upload |
| v3-potentially-bad-cors | 🛝🔗 | 🟧 | 🌕 | Potenziell schlechte CORS-Richtlinie |
| v3-express-bad-cors | 🛝🔗 | 🟥 | 🌗 | Schlechte CORS-Richtlinie |
| v3-express-no-cors | 🛝🔗 | 🟩 | 🌘 | Fehlende CORS-Richtlinie |
| v3-bad-cors | 🛝🔗 | 🟥 |
| ID | Playground | Impact | Confidence | 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 | Confidence | 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 | Confidence | Description |
|---|---|---|---|---|
| amqp-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 | |
| container-privileged | 🛝🔗 | 🟥 | 🌗 | |
| container-user-root | 🛝🔗 | 🟥 | 🌗 | |
| curl-insecure | 🛝🔗 | 🟥 | 🌗 | |
| curl-unencrypted-url | 🛝🔗 | 🟥 | 🌗 | |
| gpg-insecure-flags | 🛝🔗 | 🟥 | 🌗 | |
| installer-allow-untrusted | 🛝🔗 |
| ID | Playground | Impact | Confidence | Description |
|---|---|---|---|---|
| insecure-url-host-hassuffix-check | 🛝🔗 | 🌫️ | 🌘 |
Pull Requests und Issues sind willkommen!
Weitere Informationen findest du in CONTRIBUTING.md.
Die in diesem Repository definierten Regeln sind unter AGPLv3 lizenziert.
Die Sidecar-Beispiele können aus anderen Werken abgeleitet sein und behalten, sofern erforderlich, ihre ursprünglichen Lizenzen.
| 🛝🔗 |
| 🟧 |
| 🌗 |
Fehlendes RUnlock bei einer RWMutex-Sperre vor der Rückkehr aus einer Funktion |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | Fehlendes Entsperren des mutex vor der Rückkehr aus einer Funktion |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | Mögliche Nil-Dereferenzierungen |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | Gleichzeitige Aufrufe von append aus mehreren Goroutinen |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | Gleichzeitige Schreibvorgänge auf dieselbe Map in mehreren Goroutinen |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | Mögliche falsche Implementierung des ServerCodec-Interfaces |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | Integer-Unterläufe |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | Kopieren von sync.Mutex über Wertempfänger |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | Verwendung einer Funktion, die anfällig für DLL-Hijacking-Angriffe ist |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | Aufrufe von sync.WaitGroup.Add innerhalb anonymer Goroutinen |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | Aufrufe von sync.WaitGroup.Wait innerhalb einer Schleife |
| 🟩 |
| 🌘 |
Aufrufe des NumPy-RNG innerhalb eines Torch-Datensatzes |
| numpy-in-pytorch-modules | 🛝🔗 | 🌫️ | 🌗 | Verwendung von NumPy-Funktionen innerhalb von PyTorch-Modulen |
| numpy-load-library | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch das Laden der NumPy-Bibliothek |
| onnx-session-options | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch das Laden der ONNX-Bibliothek |
| pandas-eval | 🛝🔗 | 🟥 | 🌕 | Potenzielle Ausführung beliebigen Codes durch pandas-Funktionen, die benutzerdefinierte Ausdrücke auswerten |
| pickles-in-keras-deprecation | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch die load_model-Funktion von Keras |
| pickles-in-keras | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch die load_model-Funktion von Keras |
| pickles-in-numpy | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch NumPy-Funktionen, die auf Pickling angewiesen sind |
| pickles-in-pandas | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch Pandas-Funktionen, die auf Pickling angewiesen sind |
| pickles-in-pytorch-distributed | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch PyTorch.Distributed-Funktionen, die auf Pickling angewiesen sind |
| pickles-in-pytorch | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch PyTorch-Funktionen, die auf Pickling angewiesen sind |
| pickles-in-tensorflow | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch die load-Funktion von TensorFlow |
| pytorch-classes-load-library | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch das Laden der PyTorch-Bibliothek |
| pytorch-package | 🛝🔗 | 🟥 | 🌕 | Potenzielle Ausführung beliebigen Codes durch torch.package |
| pytorch-tensor | 🛝🔗 | 🌫️ | 🌘 | Mögliche Parsing-Probleme und Ineffizienz durch unsachgemäße Tensor-Erstellung |
| scikit-joblib-load | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch SciKit.Joblib-Funktionen, die auf Pickling angewiesen sind |
| tarfile-extractall-traversal | 🛝🔗 | 🟧 | 🌗 | Potenzielle Pfad-Traversierung beim Aufruf von extractall für ein tarfile |
| tensorflow-load-library | 🛝🔗 | 🟥 | 🌗 | Potenzielle Ausführung beliebigen Codes durch das Laden der TensorFlow-Bibliothek |
| waiting-with-pytorch-distributed | 🛝🔗 | 🟩 | 🌗 | Mögliches undefiniertes Verhalten von PyTorch, wenn nicht auf Anfragen gewartet wird |
| 🌗 |
| Schlechte CORS-Richtlinie |
| v3-no-cors | 🛝🔗 | 🟩 | 🌘 | Fehlende CORS-Richtlinie |
| v3-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Fehlender CSRF-Schutz |
| v4-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | CSRF-Schutz deaktiviert |
| 🛝🔗 |
| 🟩 |
| 🌘 |
| 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 | 🛝🔗 | 🟥 | 🌗 |