このリポジトリには、Trail of Bits が開発し公開している Semgrep ルールが含まれています。これらは当社の継続的な開発活動の一部であり、セキュリティ監査、脆弱性調査、社内プロジェクトで使用されています。新しい技術を特定するにつれて、時間の経過とともに進化していきます。
Semgrep のガイダンスについては、Testing Handbook を参照してください。
ルールを実行する最も簡単な方法は、Semgrep レジストリ から実行することです。これを行うには、プロジェクトのルートフォルダーに移動して、次のコマンドを実行します。```shell $ semgrep --config "p/trailofbits"
あるいは、このリポジトリをクローンして、プロジェクトのルートフォルダに移動し、以下のコマンドを使用して個々のルールを実行することもできます:```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
クローンしたリポジトリからすべてのルールを実行するには:```shell $ semgrep --config /path/to/semgrep-rules/ .
## 便利なフラグ
Semgrep は、`.gitignore` ファイルに含まれるものを除き、サポートされているすべてのコードファイルに対して実行されます。`.gitignore` に含まれるファイルやディレクトリを含むすべてのファイルとディレクトリに対してルールを実行する場合は、`--no-git-ignore` フラグを追加してください。```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
また、Semgrep に任意のパターンに一致するファイルやディレクトリを無視させることもできます。たとえば、Semgrep にすべての Go テストファイルを無視させたい場合は、次のコマンドを実行します:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
`-o` を使用して結果をファイルに出力します:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | Playground | Impact | Confidence | Description |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | EVMトランザクションまたはブロックからトレース情報を抽出しようとする試みを検出します。取引所やブリッジアプリケーションでは、リバートされたコールフレーム中に転送された値が計上されないように、これらのエンドポイントをカプセル化する追加ロジックを実装する必要があります。 |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | トランザクションレシートのステータスが読み取られたことを検出します |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | ゴルーチンのリーク |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | エラー発生時に意図しない代入が行われる可能性 |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | 空のマップに対する冗長な反復処理の可能性 |
| missing-runlock-on-rwmutex | 🛝🔗 | 🟧 | 🌗 | 関数から戻る前にRWMutexロックのRUnlockが欠落しています |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | 関数から戻る前にmutexのアンロックが欠落しています |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | nil参照外しの可能性 |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | 複数のゴルーチンからのappendへの同時呼び出し |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | 複数のゴルーチンによる同じマップへの同時書き込み |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | ServerCodecインターフェースの実装が不正確な可能性 |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | 整数のアンダーフロー |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | 値レシーバによるsync.Mutexのコピー |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 | |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 | |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | DLLハイジャック攻撃に対して脆弱な関数の使用 |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | 匿名ゴルーチン内でのsync.WaitGroup.Addの呼び出し |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | ループ内でのsync.WaitGroup.Waitの呼び出し |