
ランタイム対応のSCA — インストールされているだけでなく、実際に到達可能なCVEを証明します。
ランタイム対応 SCA — インストールされているだけでなく、実際に到達可能な CVE を証明します。
VulnReach は正式な OWASP Project になりました。 🎉




言語サポート: Python は完全に本番運用可能です(taint、AST、route、runtime)。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 つの階層を持つ優先順位付けされた検出結果リストです:
| 階層 | 意味 |
|---|---|
DYNAMICALLY_REACHABLE | ランタイムカバレッジが実行を確認 — 直ちに修正 |
STATICALLY_REACHABLE | AST/taint によりコードパスを証明 — 優先度が高い |
UNCERTAIN | 弱いシグナルのみ — 調査が必要 |
NOT_REACHABLE | 証拠なし — アラートキューから抑制 |
セキュリティ通知 — 開始する前に、
.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 は確認された重大な検出結果でビルドを失敗させます。curl 経由でトリガーとゲートを実行 — docs/ci-cd-gating.md を参照Authorization: Bearer <API_KEY>)GET /scan/{id}/export/pdfprovider: none。オフライン使用のために Ollama をサポートスキャン対象: multi-tier-dvpa — 11 パッケージにわたる 72 件の生 CVE を持つ、意図的に脆弱な Python/Django アプリケーション。
| レイヤー | 結果 |
|---|---|
| 生 CVE (Trivy) | 72 |
| 分類された検出結果 (VulnReach) | 90 |
| DYNAMICALLY_REACHABLE — 今すぐ修正 | 49 |
| STATICALLY_REACHABLE — このスプリントで修正 | 23 |
| UNCERTAIN — 調査 | 18 |
| NOT_REACHABLE — 抑制 | 0 |
| CI パイプラインゲート | BLOCKED |
検出結果の 46% が、未分化の「すべてを修正」キューから優先順位付けされたアクションリストに移動されました。典型的な本番サービス(多くの推移的依存関係が呼び出されない)では、この数値は 70〜90% に上昇します。
完全な方法論、証拠チェーンの詳細、パッケージレベルの内訳: docs/benchmark.md
pip install / Docker サーバーインストールとライフサイクル(start/stop/reload)。スキャンは UI または curl 経由で行い、CLI ではありませんcurl 経由でスキャンをトリガーおよびゲートscan.yml 設定リファレンス