
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 | 🛝🔗 | 🟧 | 🌗 | 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 |