vuln-check について
vuln-check は、AI エージェントや開発チーム向けのローカル脆弱性スキャナーです。grype に OSV の鮮度情報を加え、優先度付きの検出結果と具体的な更新先を返します。
主な機能
- 01ロックファイル・OS パッケージ・イメージ・SBOM のスキャン
- 02grype と OSV の脆弱性情報の統合
- 03CVSS・EPSS・CISA KEV・修正状況による評価
- 04breaking フラグ付き更新プランの作成
- 05SARIF 出力と閾値ゲート
活用シーン
- 01プロジェクト依存関係のローカル脆弱性検査
- 02コンテナイメージや SBOM のスキャン
- 03リスク閾値による CI ビルドの制御
- 04エージェントへの具体的な依存関係更新先の提示
MCP 対応
MCP サーバーは scan_dir、scan_image、scan_sbom、vuln_lookup、db_update ツールを公開し、ローカルスキャンと脆弱性照会に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
vuln-check
AI エージェント向けの脆弱性情報を提供します。grype をローカルで実行し、OSV の最新情報を重ね合わせて、40 KB の JSON ダンプではなく、具体的なアップグレード目標を含む優先順位付きの結果を返します。
- ロックファイルがあれば、あらゆる言語に対応します(npm、PyPI、Go、Maven、Cargo、RubyGems、Composer、NuGet、Hex、Pub、Swift、R、Conan など)。OS パッケージ、コンテナーイメージ、SBOM にも対応します。
- 検出項目ごとに 1 つのスコアを算出します:CVSS + EPSS + CISA KEV + 修正の利用可否。
- パッケージごとの修正計画:すべての検出項目を解消する最小バージョンと、
breakingフラグ。 CLEANは約 20 トークンです。サーバー上では何も実行されず、任意の OSV クエリを除き、データがマシンの外に出ることはありません。
インストール
# grype is required
brew install grype # or: curl -sSfL https://get.anchore.io/grype | sh -s -- -b /usr/local/bin
go install github.com/ciloops/vuln-check/cmd/vuln-check@latest
# or
brew install ciloops/tap/vuln-check # macOS cask
# or
npx @ciloops/vuln-check scan .
Linux/macOS/Windows 向けバイナリーは Releases ページにあります。Docker: ghcr.io/ciloops/vuln-check(grype を同梱)。
CLI
vuln-check scan . # agent format, OSV overlay on
vuln-check scan python:3.12-slim # image, pulled from the registry
vuln-check scan sbom:bom.cdx.json
vuln-check scan --format sarif --sarif-out out.sarif .
vuln-check scan --fail-above 69 --no-osv . # CI gate, exit 2 above threshold
vuln-check vuln CVE-2024-3094
vuln-check db update
出力(--format agent):
{"status":"ACTION_REQUIRED","target":"dir:.","packages":412,"findings":17,"shown":5,"sources":["grype","osv"],
"actions":[{"package":"pkg:npm/minimist","current":"1.2.5","target":"1.2.6","breaking":false,"fixes":["CVE-2021-44906"],"score":59}],
"top":[{"id":"CVE-2021-44906","package":"[email protected]","severity":"CRITICAL","score":59,"epss":0.015,"fixed_in":["1.2.6"]}],
"unfixable":3}
status:CLEAN | REVIEW(すべての検出項目が 40 未満)| ACTION_REQUIRED。fresh: true は、grype-db に取り込まれる前に OSV から取得されたアドバイザリーを示します。unfixable は、現在のリリース系列で修正がない検出項目の数です。
MCP
ツール:scan_dir、scan_image、scan_sbom、vuln_lookup、db_update。
Claude Code:
claude mcp add vuln-check -- vuln-check mcp
# or the plugin (adds a skill that tells Claude when to scan):
claude plugin marketplace add ciloops/vuln-check && claude plugin install vuln-check
Cursor / Windsurf / VS Code(.cursor/mcp.json、~/.codeium/windsurf/mcp_config.json、.vscode/mcp.json):
{ "mcpServers": { "vuln-check": { "command": "vuln-check", "args": ["mcp"] } } }
Codex(~/.codex/config.toml):
[mcp_servers.vuln-check]
command = "vuln-check"
args = ["mcp"]
依存関係の一覧をネットワークに送信しないようにするには、引数に --no-osv を追加します。
GitHub Action
- uses: ciloops/vuln-check@v1
with:
target: . # or an image ref
fail-above: 69
sarif: vuln.sarif
- uses: github/codeql-action/upload-sarif@v3
if: always()
with: { sarif_file: vuln.sarif }
スコア
severity = CVSS 基本値 × 6(ラベルがある場合はその値を使用) · exploit = EPSS × 30 · KEV:+10、下限 85 · 修正なし:× 0.85。0~100 の範囲に制限されます。internal/score を参照してください。
最新情報
grype-db は毎日ビルドされ、grype は最長 2 時間ごとに更新します。OSV オーバーレイは、grype がインベントリー化した purl(言語エコシステムのみ)を使って api.osv.dev に問い合わせ、grype-db がまだ認識していない情報を追加します。通常、GHSA の公開から数分で反映されます。--no-osv で無効にできます。
制限事項
- ロックファイルがない場合、推移的依存関係は検出できません。これはすべてのスキャナーに共通です。
- 修正計画は、パッケージごとにリリース系列が直線的であることを前提とします。直接依存か推移的依存かは、まだ区別されません。
- バージョン比較には、エコシステムごとのパーサーではなく汎用トークナイザーを使います。「現在のバージョンより上で最小の修正版」を見つけるには十分ですが、例外もあります(PEP 440 の post-release、特殊な Maven qualifier など)。
開発
go test ./...
go build ./cmd/vuln-check
テストは偽の grype(cmd/vuln-check/testdata/fake-grype.sh)と internal/grype/testdata のフィクスチャを使って実行します。CI では実際の grype を使った E2E テストを実行します。
リリース:vX.Y.Z タグを付けると、goreleaser がバイナリー、チェックサム、ghcr イメージ、macOS 用 Homebrew cask(HOMEBREW_TAP_GITHUB_TOKEN と ciloops/homebrew-tap リポジトリが必要)、および npm パッケージを信頼された公開方式で公開します(OIDC、トークン不要:npmjs.com で @ciloops/vuln-check の GitHub Actions 信頼されたパブリッシャーを設定し、ワークフローには release.yml を指定してください)。
ライセンス
Apache-2.0。grype と syft は Anchore による Apache-2.0 ライセンスです。脆弱性データ:NVD(パブリックドメイン)、GHSA(CC-BY 4.0)、OSV(ソースごとに異なる)、CISA KEV、FIRST EPSS。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。