
ランタイム対応のSCA — インストールされているだけでなく、実際に到達可能なCVEを証明します。
ランタイム認識型SCA — インストールされているだけでなく、実際に到達可能なCVEを証明します。
VulnReachは現在、公式のOWASPプロジェクトです。 🎉




言語サポート: Pythonは本番利用可能です(テイント、AST、ルート、ランタイム)。JavaとJavaScriptは機能するコールグラフ解析を備えており、実験的です。Go、C#、PHPはロードマップに載っています。詳細はROADMAP.mdを参照してください。
VulnReachは、標準的なSCA出力に到達可能性コンテキストを追加することで構築されています。静的解析、テイントトラッキング、ライブランタイムカバレッジを通じて、検出されたCVEのうち実際にアプリケーションで到達可能なものを証明します。
POST /scan/{id}/cancel で進行中のスキャンを停止GET /scan/{id} で summary + 分類済みバケットVULNREACH_ALLOW_DOCKER_DAEMON=true による明示的なオプトインが必要docker-socket-proxy を使用POST /findings/{id}/next-steps は、決定的な検出結果に対してアナリスト向けの修復ガイダンス(即時対応、検証プローブ、アップグレードパス、モニタリング)を生成します。遅延/オンデマンド方式: スキャンがLLMを呼び出すことはなく、LLM障害はグレースフルに劣化します。決定的な判定は読み取り専用です。docs/api.md を参照してください。scan.runtime.ebpf トレースモード(Linux中心、明示的オプトイン)参照:
各CVEは5層のエビデンスチェーンを通じて分類されます:
1. SCA (Trivy) → is the package installed and vulnerable?
2. Taint analysis (tainter) → does user input flow to the vulnerable sink?
3. AST analysis → is the vulnerable function in your call graph?
4. Route exposure → is the call path reachable from an HTTP endpoint?
5. Runtime coverage → was the vulnerable code actually executed?
結果は、4つの階層を持つ優先順位付きの検出結果リストです:
| Tier | 意味 |
|---|---|
DYNAMICALLY_REACHABLE | ランタイムカバレッジが実行を確認 — 直ちに修正 |
STATICALLY_REACHABLE | AST/テイント経由でコードパスを証明 — 高優先度 |
セキュリティ通知 — 開始する前に、
.env.exampleを.env.localにコピーし、 すべてのCHANGE_ME値を強力なランダムシークレットに置き換えてください。
実際の認証情報を設定し、CORS_ORIGINSを構成しない限り、VulnReachを公開ネットワークに公開しないでください。
git clone https://github.com/ihrishikesh0896/vulnreach.git
cd vulnreach
# 1. Create your local config
cp .env.example .env.local
# 2. Fill in every CHANGE_ME — generate secrets with: openssl rand -hex 32
$EDITOR .env.local
# 3. Start the stack
docker compose up --build
# Optional: enable dynamic runtime scans (Docker daemon access via restricted socket proxy)
# docker compose -f docker-compose.yml -f docker-compose.runtime.yml up --build
認証オプション:
POST /loginSettings -> API Keysで作成し、Authorization: Bearer <API_KEY> として使用# Get a token (replace with the credentials you set in .env.local)
TOKEN=$(curl -s -X POST http://localhost:8000/login \
-H "Content-Type: application/json" \
-d '{"username":"<your-admin-user>","password":"<your-admin-password>"}' | jq -r .access_token)
# Start scan from a GitHub repo
curl -X POST http://localhost:8000/scan \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"repo_url":"https://github.com/yourorg/yourapp"}'
# Poll for results
curl http://localhost:8000/scan/<scan_id> \
-H "Authorization: Bearer $TOKEN" | jq .summary
coverage.py によるDockerベースのカバレッジ収集policy.block_if が確認された重大な検出結果でビルドを失敗させるAuthorization: Bearer <API_KEY>)GET /scan/{id}/export/pdfprovider: none。オフライン利用にはOllamaをサポートスキャン対象: multi-tier-dvpa — 11パッケージに72件の生のCVEを含む、意図的に脆弱なPython/Djangoアプリケーション。
検出結果の46%が、無差別な「すべて修正」キューから優先順位付きのアクションリストに移されました。一般的な本番サービス(多くの推移的依存関係が呼び出されない)では、この数値は70〜90%に上昇します。
完全な方法論、エビデンスチェーンの詳細、パッケージレベルの内訳: docs/benchmark.md
scan.yml の完全な設定リファレンスtrivy をPATHに追加(インストール)jq(クイックスタートの例で使用 — インストール)任意(存在しない場合はすべて正常にスキップされます):
semgrep — pip install semgreptainter — pip install tainter(テイントフロー解析。開発ガイドを参照)Apache 2.0 — LICENSE を参照してください。
UNCERTAIN| 弱いシグナルのみ — 調査 |
NOT_REACHABLE | エビデンスなし — アラートキューから抑制 |
| レイヤー | 結果 |
|---|
| 生のCVE(Trivy) | 72 |
| 分類済み検出結果(VulnReach) | 90 |
| DYNAMICALLY_REACHABLE — 今すぐ修正 | 49 |
| STATICALLY_REACHABLE — 今スプリントで修正 | 23 |
| UNCERTAIN — 調査 | 18 |
| NOT_REACHABLE — 抑制 | 0 |
| CIパイプラインゲート | BLOCKED |