
脆弱性検出および監査に重点を置いたコードレビューのための静的解析セキュリティルール。Java、Go、Python、C#、Kotlin、PHP、Kubernetes、GitHub Actions に対応。
elttam の公開 semgrep ルールリポジトリへようこそ。

私たちは、コード支援によるセキュリティ監査やソフトウェアセキュリティ調査の過程で、ルールを定期的に開発しています。semgrep コミュニティのために、今後も頻繁に新しいルールを追加し、ここにあるルールを改善していく予定です。semgrep を利用するプロダクトセキュリティエンジニアやコード監査担当者にとって、これらのルールが役立つことを願っています。
バグを見つけた場合は、GitHub の issue を報告してください。
このガイドでは、Semgrep に精通しており、すでにインストール済みであることを前提としています。
このリポジトリでは、ルールを次の 2 つの大まかなカテゴリに分けています。
rules/ -- 開発者や AppSec チームに役立つルール。これらは一般的に脆弱性に関するものです。rules-audit/ -- ソースコード監査に役立つルール。興味深い動作の特定やエントリーポイントの列挙を通じて、手動によるソースコードレビューを補完します。次のコマンドでこのリポジトリを試すことができます:
git clone https://github.com/elttam/semgrep-rules.git
ルールを試すには、次を実行します:
semgrep --config semgrep-rules/rules semgrep-rules/rules/
監査に特化したルールを試すには、次を実行します:
semgrep --config semgrep-rules/rules-audit semgrep-rules/rules-audit/
これらのルールは、脆弱性やその他の弱点を特定することに重点を置いています。
これらのルールは、興味深い動作の特定やエントリーポイントの列挙を通じて、手動によるソースコードレビューを支援するのに役立ちます。
| ルールパス | 言語 | テクノロジー | 説明 |
|---|
| generic/jsp-likely-xss | Generic | JSP | テンプレート内の安全でないレンダリングによる XSS を検出 |
| go/lang/security/audit/executable-symlink | Go | os.Executable によるシンボリックリンク乗っ取りの可能性 | |
| go/lang/security/audit/sprintf-plain-string | Go | Sprintf でエスケープされていない制御文字 | |
| go/lang/security/audit/uintptr-nonatomic | Go | 変換された uintptr の非アトミックな使用 | |
| java/lang/security/audit/crypto/gcm-static-iv | Java | 鍵と IV に同じ値を使用する GCM を検出 | |
| java/lang/security/audit/crypto/randomstringutils | Java | Apache Commons | セキュリティに適さないデフォルトの java.util.Random を使用する RandomStringUtils を検出 |
| java/spring/security/audit/remoting/ | Java | Spring | Spring Remoting の使用を検出 |
| php/php-filter-chain-read-from-oracle | PHP | PHP フィルタチェーンのエラーベースオラクルの可能性を検出 | |
| yaml/github-actions/security/save-state | YAML | Github-Actions | 安全ではなく非推奨の ::save-state の使用を検出 |
| yaml/github-actions/security/set-output | YAML | Github-Actions | 安全ではなく非推奨の ::set-output の使用を検出 |
| yaml/kubernetes/audit/network-policy-ingress-any | YAML | Kubernetes | Ingress を ANY で許可する NetworkPolicy を含むコンテナ仕様を検出 |
| yaml/kubernetes/audit/privileged-container | YAML | Kubernetes | 特権付き security context を持つコンテナ仕様を検出 |
| yaml/kubernetes/security/allow-privileged-escalation | YAML | Kubernetes | 特権昇格を許可するコンテナ仕様(init コンテナを含む)を検出(allowPrivilegeEscalation) |
| yaml/kubernetes/security/no-security-context | YAML | Kubernetes | security context がないコンテナ仕様を検出。Pod またはコンテナの security context を考慮します。 |
| yaml/kubernetes/security/run-as-non-root | YAML | Kubernetes | root での実行を許可するコンテナ仕様(runAsNonRoot がないもの)を検出。Pod とコンテナの security context を考慮します PR |
| yaml/kubernetes/security/run-as-non-root-unsafe-value | YAML | Kubernetes | root での実行を明示的に許可するコンテナ仕様(runAsNonRoot: false)を検出。Pod とコンテナの security context を考慮します PR |
| ルールパス | 言語 | テクノロジー | 説明 |
|---|
| c/lang/security/audit/exec | C | プロセスの実行を検出 | |
| csharp/dotnet/security/audit/entrypoints/apsnet-controller | C# | ASP.NET | ASP.NET REST エントリーポイントを検出 |
| java/jackson/polymorphic-typing | Java | Jackson | 脆弱な Jackson のデシリアライゼーション問題の発見に役立つポリモーフィックタイピングを検出 |
| java/jackson/type-resolver-override | Java | Jackson | TypeResolveBuilder を使用したポリモーフィックタイピングを検出 |
| java/jax-rs/security/audit/entrypoints/ | Java | JAX-RS | JAX-RS REST エントリーポイントを検出 |
| java/lang/security/audit/processbuilder | Java | ProcessBuilder によるプロセスの実行を検出 | |
| java/spring/security/audit/entrypoints/ | Java | Spring | Spring REST エントリーポイントを検出 |
| java/struts2/security/audit/devmode/ | Java | Struts2 | devMode の使用を検出 |
| java/struts2/security/audit/dmi/ | Java | Struts2 | Dynamic Method Invocation の使用を検出 |
| java/struts2/security/audit/entrypoints/ | Java | Struts2 | Struts2 REST エントリーポイントを検出 |
| java/xstream/security/audit/fromxml | Java | XStream | XStream.fromXML(...) の使用を検出 |
| kotlin/spark/security/audit/entrypoints/ | Kotlin | Spark | Spark REST エントリーポイントを検出 |
| python/flask/security/audit/entrypoints/ | Python | Flask | Flask REST エントリーポイントを検出 |