GhostFree について
GhostFreeは、AIコーディングアシスタントを使うチーム向けに、リポジトリの依存関係から既知のCVEを調べるローカルMCPサーバーです。OSV.devの結果にNVDとCISA KEVの情報を加え、受容したリスクをリポジトリに記録します。
主な機能
- 01リポジトリのマニフェストから依存関係を検出
- 02深刻度で絞ってOSV.devのCVEを照会
- 03NVDとCISA KEVの情報で脆弱性を補足
- 04期限付きのリスク受容を記録・管理
活用シーン
- 01リポジトリの依存関係に既知のCVEがないか確認
- 02深刻度と悪用状況で脆弱性の優先度を判断
- 03理由と期限を付けて受容したリスクを記録
MCP 対応
依存関係の検出、CVEの確認と情報補足、受容済みリスクの管理ツールをMCPクライアントに公開し、スキャン用プロンプトも提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y ghostfreeGHOSTFREE_DIROverride the directory where GhostFree stores its data files (accepted-risks.yml, config.yml). Defaults to .ghostfree/ in the scanned repository root.GHOSTFREE_MIN_SEVERITYMinimum CVE severity level to surface. One of: CRITICAL, HIGH, MEDIUM (default), LOW.NVD_API_KEYシークレットOptional NVD API key for higher rate limits when enriching CVE details. Free to request at https://nvd.nist.gov/developers/request-an-api-key.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
6掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
GhostFree とは 🚫👻?
どのソフトウェアチームにも、依存関係に潜む幽霊をコードベースから追い払うための助けが必要です。
GhostFree は、OSV.dev を使用して公開済みの CVE に基づきリポジトリの依存関係をスキャンするローカル MCP サーバーです。NVD と CISA KEV による情報の補完で検出結果のトリアージと修正を支援し、受容済みリスクを管理できます。これらすべてを AI コーディングアシスタントから直接行えます。
クイックスタート
インストール、登録、支払いは不要です。使用するコードツールの MCP 設定に GhostFree を追加し、/ghostfree.scan を実行してください。
VS Code Copilot(拡張機能 — 最も簡単)
拡張機能ビュー(Ctrl+Shift+X)で @mcp ghostfree を検索し、インストールをクリックします。次に、コマンドパレット(Ctrl+Shift+P)を開き、MCP: List Servers を実行して GhostFree を選択し、Start Server を選んで、確認画面が表示されたら信頼を承認します。JSON 設定は不要です。
VS Code Copilot(手動設定)
プロジェクトのルートに .vscode/mcp.json を作成または更新します。
{
"servers": {
"ghostfree": {
"type": "stdio",
"command": "npx",
"args": ["-y", "ghostfree", "--repo-path", "${workspaceFolder}"],
"env": {}
}
}
}
Claude Code
プロジェクトのルートに .mcp.json を作成します。
{
"mcpServers": {
"ghostfree": {
"type": "stdio",
"command": "npx",
"args": ["-y", "ghostfree", "--repo-path", "."]
}
}
}
Cursor
.cursor/mcp.json を作成します。
{
"mcpServers": {
"ghostfree": {
"command": "npx",
"args": ["-y", "ghostfree", "--repo-path", "."]
}
}
}
Claude Desktop
claude_desktop_config.json に追加します(場所は OS によって異なります)。
{
"mcpServers": {
"ghostfree": {
"command": "npx",
"args": ["-y", "ghostfree", "--repo-path", "/path/to/your/repo"]
}
}
}
使い方
/ghostfree.scan プロンプト
スキャンの実行には、組み込みプロンプトを使う方法がおすすめです。AI クライアントで次のように入力します。
/ghostfree.scan
次のフローが実行されます。
- 検出 — すべてのマニフェストファイル(requirements.txt、package.json、go.mod、Cargo.toml、pom.xml、*.csproj など)を見つけます
- しきい値 — まだ設定されていない場合、最低深刻度レベル(CRITICAL / HIGH / MEDIUM / LOW)を確認します
- スキャン — 検出されたすべてのパッケージに関する CVE を OSV.dev に問い合わせます
- トリアージ — 番号付きの結果を一度に 10 件提示します。調査する項目を選択してください。
- 情報の補完 — 選択した項目の CVSS ベクトル、CWE 分類、CISA KEV の「悪用が確認された」ステータスを取得します
- 修正 — アップグレード、コード変更、または理由と有効期限を指定したリスク受容を提案します
セッション例
User: /ghostfree.scan
GhostFree: Discovering dependencies...
Found 84 packages across 2 ecosystems (npm, PyPI).
What minimum severity should I surface? (CRITICAL / HIGH / MEDIUM / LOW)
User: HIGH
GhostFree: Scanning against OSV.dev...
[1] CVE-2021-44228 CRITICAL (10.0) — org.apache.logging.log4j:[email protected]
Log4Shell: Remote code execution via JNDI lookup
Fix: upgrade to 2.17.1
[2] CVE-2022-25881 HIGH (7.5) — [email protected]
ReDoS in http-cache-semantics
Fix: upgrade to 4.1.1
[3] CVE-2021-28918 CRITICAL (9.8) — [email protected]
IP address parsing bypass (SSRF / allowlist bypass)
Fix: upgrade to 1.1.0
Showing 1-3 of 3. Which would you like to investigate? (e.g., 1, 2, or 'all')
User: 3
GhostFree: [Calls enrich_cve CVE-2021-28918]
CVE-2021-28918 — netmask CRITICAL (9.8)
CVSS: 9.1 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CWE: CWE-704 (Incorrect Type Conversion)
CISA KEV: Not listed
What it is: [email protected] improperly parses octal-notation IP addresses (e.g. 010.0.0.1),
treating them as decimal. This enables SSRF protection bypass and IP allowlist/blocklist
bypass — an attacker can craft an address that appears private but routes to a public host.
Exploit status: Not in CISA KEV. Public PoC exists (SICK-2021-011), ~280k affected projects.
Codebase exposure: netmask is not directly imported — it appears in package-lock.json as a
transitive dependency of [email protected] (a transitive dev dependency). No direct
require('netmask') or IP parsing logic found. Reachability is very low.
Recommendation: Upgrade — low effort, patch version (1.0.6 → 1.1.0), no API changes.
netmask is a transitive dependency; use npm audit fix or add a package.json overrides entry
to force [email protected].
→ Reply with a number to investigate another CVE, 'back' to return to the list,
'fix' to apply the recommended fix, 'accept' to record an accepted risk, or 'done' to wrap up.
例:既知のリスクを受容する
User: Accept CVE-2022-25881 — it's only in our CI test pipeline, not reachable in production. Expiry end of year.
GhostFree: [Calls accept_risk CVE-2022-25881]
Accepted risk recorded:
• CVE-2022-25881 — http-cache-semantics (HIGH, CVSS 7.5)
Reason: Only used in CI test pipeline, not reachable in production
Expires: 2026-12-31
ID: 550e8400-e29b-41d4-a716-446655440000
This acceptance is saved to .ghostfree/accepted.yml. Commit this file to share the
decision with your team. The CVE will be suppressed on future scans until expiry.
User: List all accepted risks
GhostFree: [Calls list_accepted_risks]
## Accepted Risks (1)
**CVE-2022-25881** — ✅ expires in 272 days (2026-12-31) | Severity at acceptance: HIGH (7.5)
ID: 550e8400-e29b-41d4-a716-446655440000
Reason: Only used in CI test pipeline, not reachable in production
Accepted: 2026-04-03T10:00:00.000Z
例:特定の CVE の情報を補完する
User: Tell me everything about CVE-2021-44228
GhostFree: [Calls enrich_cve CVE-2021-44228]
## Enrichment: CVE-2021-44228
### NVD
CVSS Score: 10.0 · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
CWE: CWE-917 (Improper Neutralization of Special Elements in an Expression Language Statement)
References:
• https://nvd.nist.gov/vuln/detail/CVE-2021-44228
• https://logging.apache.org/log4j/2.x/security.html
### CISA KEV
⚠️ CONFIRMED actively exploited in the wild (added to KEV: 2021-12-10)
ツールのリファレンス
| ツール | 読み取り専用 | 説明 |
|---|---|---|
discover_dependencies | ✅ | リポジトリのマニフェストをスキャンし、エコシステムごとに固定されたすべてのパッケージを返します |
check_cves | ✅ | OSV.dev に CVE を問い合わせ、深刻度で絞り込み、受容済みリスクを適用します |
enrich_cve | ✅ | NVD から CVSS、CWE、参照情報と、KEV の悪用ステータスを取得します |
list_accepted_risks | ✅ | 有効期限のステータスと深刻度のスナップショットを含む、受容済みリスクをすべて一覧表示します |
accept_risk | ❌ | 理由、有効期限、深刻度のスナップショットを指定して、受容済みリスクを記録します |
remove_accepted_risk | ❌ | UUID を指定して受容済みリスクを削除します |
読み取り専用のツールはすべて、MCP クライアントで自動承認しても安全です。書き込みツール(accept_risk、remove_accepted_risk)では確認が求められます。
check_cves の入力
| パラメーター | 必須 | 説明 |
|---|---|---|
packages | はい | {name, version, ecosystem} の配列です。discover_dependencies の出力を使用します |
min_severity | いいえ | CRITICAL、HIGH、MEDIUM、または LOW です。指定されていない場合は、GHOSTFREE_MIN_SEVERITY 環境変数、次に .ghostfree/config.yml の順に値を確認し、最後に選択を求めます |
accept_risk の入力
| パラメーター | 必須 | 説明 |
|---|---|---|
cve_id | はい | CVE ID。例:CVE-2021-44228 |
reason | はい | ビジネス上の正当な理由 |
expires_on | はい | YYYY-MM-DD 形式の有効期限 |
confirm_extended_expiry | いいえ | 有効期限が1年を超える場合は true に設定します |
severity | はい | リスク受容時点の重大度ラベル(CRITICAL、HIGH、MEDIUM、LOW、UNKNOWN)。スナップショットであり、リアルタイムではありません |
cvss_score | いいえ | リスク受容時点のCVSSスコア。スナップショットであり、リアルタイムではありません |
設定
リポジトリのルートに .ghostfree/config.yml を作成すると、ソース管理を通じてチームと共有できる重大度のしきい値を永続的に設定できます。
min_severity: HIGH
この設定は環境変数より優先されます。どちらも設定されていない場合、GhostFree はスキャン時に選択を求めます。
環境変数
| 変数 | 説明 |
|---|---|
NVD_API_KEY | 任意。レート制限を緩和するNVD APIキー(50 req/30s、通常は5 req/30s) |
GHOSTFREE_MIN_SEVERITY | 任意。重大度の確認を省略し、このしきい値(CRITICAL、HIGH、MEDIUM、LOW)を常に使用します |
GHOSTFREE_DIR | 任意。.ghostfree/ の代わりにカスタムディレクトリを使用します(accepted.yml と config.yml の両方に適用) |
VS Code 拡張機能のユーザー: ワークスペースのルートに .env ファイルを作成してください。拡張機能が自動的に読み込み、値をサーバーに渡します。それ以外のすべての構成(手動でのMCP JSON設定)では、クライアントの設定ファイル(.vscode/mcp.json、.mcp.json、.cursor/mcp.json、claude_desktop_config.json など)の "env" ブロックに追加するか、システム環境変数としてエクスポートしてください。
リスク受容の管理
リスクを受容すると、GhostFree はリポジトリのルートにある .ghostfree/accepted.yml に記録します。チームと受容した判断を共有するには、このファイルをコミットしてください。
accepted_risks:
- id: 550e8400-e29b-41d4-a716-446655440000
cve_id: CVE-2022-25881
reason: Only used in CI test pipeline, not reachable in production
expires_on: "2027-01-01"
accepted_at: "2026-04-02T10:00:00.000Z"
severity_at_acceptance: HIGH
cvss_score_at_acceptance: 7.5
ルール:
expires_onは必須です。期限のない受容はできません- 期限が1年以内の場合:すぐに受容されます
- 期限が1年を超える場合:
confirm_extended_expiry=trueが必要です - 期限切れの受容は通知なしに削除されることはありません。すべてのスキャンで警告として再表示されます
サポート対象のエコシステムとマニフェスト
| エコシステム | マニフェストファイル |
|---|---|
| Python | requirements.txt、pyproject.toml、Pipfile.lock、setup.cfg |
| Node.js | package.json、package-lock.json |
| Go | go.mod、go.sum |
| Rust | Cargo.toml、Cargo.lock |
| Java | pom.xml、build.gradle、build.gradle.kts |
| .NET | *.csproj、packages.config |
バージョン範囲の処理
マニフェストに正確なバージョンではなくバージョン範囲が指定されている場合、GhostFree は脆弱性データベースを照会するために単一のバージョンを抽出します。説明を明確にするため、2つの分類体系を使用します。VRC(指定子の意味)とVRHP(それに対して行う処理)です。
バージョン範囲の概念(VRC)
VRC は、バージョン指定子が表す内容をエコシステムに依存せず示すラベルです。同じエントリに複数の VRC が適用される場合があります(例:プレリリースタグ付きのキャレット範囲は vrc-caret + vrc-prerelease です)。
| VRC | 概念 | エコシステムの例 |
|---|---|---|
vrc-exact | 固定された正確なバージョン | npm 1.4.0、Python ==2.28.0、Cargo 1.0.188、Maven 6.0.11 |
vrc-lockfile-pin | ロックファイルで解決されたバージョン | package-lock.json、Cargo.lock、go.sum、Pipfile.lock |
vrc-prerelease | プレリリース/安定版前のタグ | 1.0.0-beta、9.0.0-preview.1、1.0.0-SNAPSHOT、32.1.2-jre |
vrc-caret | キャレット(メジャー互換)範囲 | npm ^1.2.3、Cargo ^1.0.100、Poetry ^2.28.0 |
vrc-tilde | チルダ(マイナー/パッチ互換)範囲 | npm ~4.17.0、Cargo ~1.0.0、Poetry ~2.28.0 |
vrc-inclusive-minimum | 包含する下限(>=) | npm >=1.2.0、Python >=2.28.0、Cargo >=0.5 |
vrc-exclusive-minimum | 除外する下限(>) | npm >1.0.0、Python >2.0、Cargo >0.5 |
vrc-compatible-release | 互換リリース | Python ~=2.28 |
vrc-compound | 複数の制約を組み合わせたもの | npm >=1.0.0 <2.0.0、Cargo >=0.5, <1.0、Python >=2.28,<3.0 |
vrc-inclusive-range | 下限を含む角括弧の範囲 | NuGet [1.0,2.0)、Maven [1.0,2.0] |
vrc-exclusive-range | 下限を除外する角括弧の範囲 | NuGet (4.1.3,)、Maven (1.0,2.0) |
vrc-wildcard | ワイルドカード/任意のバージョン | npm *、NuGet 6.*、Cargo * |
vrc-upper-bound-only | 下限のない上限 | npm <2.0.0、Python <=3.0、NuGet [,1.0]、(,1.0) |
vrc-exclusion | バージョンの除外 | Python !=2.0 |
vrc-tag | 名前付きタグまたはエイリアス | npm latest |
vrc-workspace-ref | ワークスペース/パス参照 | npm workspace:*、Cargo { workspace = true } |
vrc-property-placeholder | ビルド変数のプレースホルダー | Maven ${spring.version} |
vrc-build-metadata | ビルドメタデータのサフィックス | Go v1.0.0+build.123 |
vrc-pseudo-version | Go の擬似バージョン | Go v0.0.0-20230817171753-abc123 |
バージョン範囲の処理原則(VRHP)
VRHP は、VRC が特定された後に GhostFree が実行する処理です。文字列をキーとして使用するため、順序は関係ありません。
| VRHP | 処理 | 詳細 |
|---|---|---|
vrhp-lockfile | ロックファイルのバージョンを使用 | 解決済みのロックファイル(package-lock.json、Cargo.lock、go.sum、Pipfile.lock)が存在する場合、そのファイルに記録された正確なインストール済みバージョンを使用します。解釈は不要です。 |
vrhp-extract-lower | 下限を抽出 | 範囲指定子(^、~、>=)について、開発者が許容した最小バージョンを抽出します。これは最も古く、脆弱性がある可能性が最も高い、使用されている可能性のあるバージョンです。 |
vrhp-skip | 依存関係をスキップ | 指定子が上限のみ(<=、<)を指定している場合、除外(!=)である場合、解決できない場合(*、latest、`workspace:*)、またはリゾルバーのみが評価できる表記を使用している場合は、依存関係をスキップします。誤ったバージョンを照会すると誤検知や検知漏れが生じますが、どちらも、バージョンを固定するかロックファイルを用意すれば解消できるカバレッジの欠落よりも好ましくありません。 |
vrhp-preserve-prerelease | プレリリースタグを保持 | 1.0.0-beta.1、2.0.0-rc、32.1.2-jre のようなバージョンは、そのまま照会します。プレリリースバージョンには独自の CVE がある可能性があるため、タグを削除したり正規化したりしてはいけません。vrc-prerelease が別の VRC と併存する場合、この原則は常に主要な VRHP と併せて適用されます。 |
vrhp-passthrough | そのまま引き渡す | Go の go.mod、.NET の packages.config、およびすべてのロックファイルは、範囲演算子を含まない正確な固定バージョンを使用します。バージョンではない文字列(例:Maven の ${...} プロパティプレースホルダー)はスキップされます。 |
エコシステムの例
| エコシステム/ファイル | 入力例 | 照会されるバージョン | VRC | VRHP |
|---|---|---|---|---|
.NET *.csproj — 正確なバージョン | 2.28.2 | 2.28.2 | vrc-exact | vrhp-passthrough |
.NET *.csproj — プレリリース | 1.0.0-beta, 9.0.0-preview.1 | 1.0.0-beta, 9.0.0-preview.1 | vrc-exact + vrc-prerelease | vrhp-passthrough |
.NET *.csproj — 包含区間 [lower,upper) | [1.0,2.0) | 1.0 | vrc-inclusive-range | vrhp-extract-lower |
.NET *.csproj — ワイルドカード 6.*, 6.0.* | 6.*, 6.0.* | 6.0, 6.0.0 | vrc-wildcard | vrhp-extract-lower — .* を .0 に置換 |
.NET *.csproj — 下限が排他的/上限のみ | (4.1.3,), [,1.0], (,1.0) | (省略) | vrc-exclusive-range, vrc-upper-bound-only | vrhp-skip |
.NET packages.config — 正確なバージョン | 13.0.3 | 13.0.3 | vrc-exact | vrhp-passthrough |
.NET packages.config — プレリリース | 5.0.0-beta.1 | 5.0.0-beta.1 | vrc-exact + vrc-prerelease | vrhp-passthrough |
Go go.mod — 正確なバージョン | v1.21.0 | 1.21.0 | vrc-exact | vrhp-passthrough — v プレフィックスを削除 |
Go go.mod — プレリリース/ビルドメタデータ | v1.0.0-beta.1, v2.0.0+build.123 | 1.0.0-beta.1, 2.0.0+build.123 | vrc-prerelease, vrc-build-metadata | vrhp-passthrough — v を削除し、タグは保持 |
Go go.sum — 正確なバージョン | v1.21.0 | 1.21.0 | vrc-lockfile-pin | vrhp-lockfile — v を削除し、/go.mod の行は重複排除 |
Go go.sum — プレリリース | v1.0.0-rc.1 | 1.0.0-rc.1 | vrc-lockfile-pin + vrc-prerelease | vrhp-lockfile — v を削除 |
Java build.gradle / build.gradle.kts — 正確なバージョン | 2.28.2 | 2.28.2 | vrc-exact | vrhp-passthrough |
Java build.gradle / build.gradle.kts — プレリリース/SNAPSHOT/分類子 | 1.0.0-SNAPSHOT, 32.1.2-jre | 1.0.0-SNAPSHOT, 32.1.2-jre | vrc-exact + vrc-prerelease | vrhp-passthrough |
Java build.gradle / build.gradle.kts — 包含区間 | [1.0,2.0) | 1.0 | vrc-inclusive-range | vrhp-extract-lower |
Java build.gradle / build.gradle.kts — 下限が排他的/上限のみ | (4.1.3,), [,1.0] | (省略) | vrc-exclusive-range, vrc-upper-bound-only | vrhp-skip |
Java pom.xml — 正確なバージョン | 2.28.2 | 2.28.2 | vrc-exact | vrhp-passthrough |
Java pom.xml — プレリリース/SNAPSHOT/分類子 | 1.0.0-SNAPSHOT, 32.1.2-jre | 1.0.0-SNAPSHOT, 32.1.2-jre | vrc-exact + vrc-prerelease | vrhp-passthrough |
Java pom.xml — 包含区間 | [1.0,2.0) | 1.0 | vrc-inclusive-range | vrhp-extract-lower |
Java pom.xml — 下限が排他的/上限のみ/プレースホルダー | (4.1.3,), [,1.0], ${spring.version} | (省略) | vrc-exclusive-range, vrc-upper-bound-only, vrc-property-placeholder | vrhp-skip |
npm package.json — 正確なバージョン | 1.4.0 | 1.4.0 | vrc-exact | vrhp-passthrough |
npm package.json — プレリリース | 1.0.0-beta.1, ^1.0.0-rc.2 | 1.0.0-beta.1, 1.0.0-rc.2 | vrc-prerelease, vrc-caret + vrc-prerelease | vrhp-preserve-prerelease, vrhp-extract-lower |
npm package.json — ^, ~, >=, >, = | ^1.2.3, >=1.2.0 <2.0.0 | 1.2.3, 1.2.0 | vrc-caret, vrc-compound | vrhp-extract-lower |
npm package.json — *, latest, workspace:*, < | *, latest, <2.0.0 | (省略) | vrc-wildcard, vrc-tag, vrc-workspace-ref, vrc-upper-bound-only | vrhp-skip |
npm package-lock.json | 1.2.3 | 1.2.3 | vrc-lockfile-pin | vrhp-lockfile |
Python Pipfile.lock | 2.28.2 | 2.28.2 | vrc-lockfile-pin | vrhp-lockfile |
Python pyproject.toml(PEP 621)— == / >= / ~= | httpx==0.24.0, pydantic>=2.0.0 | 0.24.0, 2.0.0 | vrc-exact, vrc-inclusive-minimum | vrhp-passthrough, vrhp-extract-lower |
Python pyproject.toml(Poetry)— ^, ~, >= | ^2.28.0, >=2.28,<3.0 | 2.28.0, 2.28 | vrc-caret, vrc-compound | vrhp-extract-lower |
Python pyproject.toml(Poetry)— プレリリース | ^1.0.0-beta | 1.0.0-beta | vrc-caret + vrc-prerelease | vrhp-extract-lower |
Python pyproject.toml(Poetry)— !=、< のみ | !=2.28.0, <3.0 | (省略) | vrc-exclusion, vrc-upper-bound-only | vrhp-skip |
Python requirements.txt, setup.cfg — == / === / >= / > / ~= | requests>=2.28.0, requests~=2.28, requests===2.0.0 | 2.28.0, 2.28, 2.0.0 | vrc-inclusive-minimum, vrc-compatible-release, vrc-exact | vrhp-extract-lower, vrhp-passthrough |
Python requirements.txt, setup.cfg — プレリリース | requests==1.0.0-beta | 1.0.0-beta | vrc-exact + vrc-prerelease | vrhp-passthrough |
Python requirements.txt, setup.cfg — <= / < / != のみ | requests<=2.28.0 | (省略) | vrc-upper-bound-only, vrc-exclusion | vrhp-skip |
Rust Cargo.toml — バージョンを直接指定(暗黙の ^) | 1.0.188 | 1.0.188 | vrc-exact | vrhp-passthrough |
Rust Cargo.toml — プレリリース | 1.0.0-beta | 1.0.0-beta | vrc-exact + vrc-prerelease | vrhp-passthrough |
Rust Cargo.toml — ^, ~, >=, >, = | ^1.0, >=0.5 | 1.0, 0.5 | vrc-caret, vrc-inclusive-minimum | vrhp-extract-lower |
Rust Cargo.toml — *, < | *, <1.0 | (省略) | vrc-wildcard, vrc-upper-bound-only | vrhp-skip |
Rust Cargo.lock | 1.0.86 | 1.0.86 | vrc-lockfile-pin | vrhp-lockfile |
FAQ
Q: 現在使っている AI コーディングエージェントだけでは不十分なのはなぜですか?
AI エージェントが把握している脆弱性情報は、学習データのカットオフ時点で固定されています。新しい CVE は毎日公開されます。たとえば Log4Shell は 2021 年 12 月に公開されており、それ以前に学習したモデルには把握できません。
GhostFree は、信頼できる脆弱性情報を公開している組織にリアルタイムで問い合わせて最新情報を取得するため、モデルの学習時期にかかわらず、スキャンのたびに現在の脅威状況が反映されます。また、この追加コンテキストは、エージェントが提示できる提案や推奨事項の精度を高めるうえでも重要です。
さらに、受け入れたリスクとその理由、有効期限を記録し、リポジトリ内に監査可能な記録を構築します。
これらすべてを、可能な限り決定性を高めながら実現することを目指しています。ただし、その中心には、GhostFree と連携するよう選択したエージェントが引き続き存在します。可能な限り高性能なモデルで実行することを推奨していますが、私たちのテストでは、この決定性を高める戦略により、低価格または低性能なモデルでも、GhostFree の支援を受けることで、脆弱性修正アシスタントとして十分な効果を発揮できることがわかりました。
Q: GhostFree はコードをどこかにアップロードしますか?
いいえ。OSV.dev に送信されるのは、パッケージ名とバージョンのみです。ソースコードがマシンの外部に送信されることはありません。
Q: API キーは必要ですか?
いいえ。OSV.dev では認証は不要です。NVD の情報補完も API キーなしで利用できます(30 秒あたり 5 リクエストに制限されます)。通常の人間による利用ではこの制限に達する可能性は低いですが、自律型エージェントの設定で実行すると、制限に達することがあります。より高い制限を利用するには、環境変数 NVD_API_KEY を設定してください(詳細は nist.gov のウェブサイトをご覧ください)。
Q: オフラインの場合はどうなりますか?
スキャンには OSV.dev へのアクセスが必要です。NVD および KEV の情報補完は、接続できない場合、警告を表示して機能を縮小します。
Q: 推移的依存関係もスキャンしますか?
一部対応しています。ロックファイルが存在する場合、GhostFree は解決済みの依存関係グラフ全体(直接依存関係と推移的依存関係)をスキャンします。対象は、Node.js の package-lock.json、Rust の Cargo.lock、Go の go.sum、Python の Pipfile.lock です。ロックファイルに対応していないエコシステム(Java、.NET)では、直接宣言された依存関係のみをスキャンします。
Q: スキャンで、すでに修正済みの CVE が見つかりました。どうすればよいですか?
マニフェスト内のパッケージのバージョンを更新してください。次回のスキャンでは表示されなくなります。
サポート
バグ報告や機能リクエストは、GitHub で issue を作成してください。
プライバシーポリシー
GhostFree は、お使いのマシン上でリポジトリの依存関係マニフェストを処理します。マシンの外部に送信されるデータと送信先は、以下のとおりです。
| 送信されるデータ | 送信先 | 目的 |
|---|---|---|
| パッケージ名とバージョン | OSV.dev(Google) | CVE の照会 |
| CVE ID | NVD API(NIST/米国政府) | CVSS スコアおよび CWE の情報補完 |
| CVE ID | CISA KEV(米国政府) | 既知の悪用状況 |
当社が送信するよう実装しているデータに、ソースコード、ファイルの内容、リポジトリ名、ユーザー識別情報、またはいかなる種類のテレメトリデータも含まれることはありません。 ほかの AI 支援ツールを利用する場合と同様に、お使いの環境、AI モデル、エージェント、IDE などが、当社のコードやお客様のコードとどのようにやり取りするかは、当社の管理範囲外です。このツールを利用する方は、同梱されている LICENSE.txt(MIT)の内容をご確認ください。
GhostFree は、いかなるデータも収集、保存、共有しません。すべての処理はローカルで行われます。受け入れたリスクを記録するファイル(.ghostfree/accepted.yml)は、お客様の管理下でリポジトリ内に保持されます。
ご質問がある場合は、GitHub で issue を作成してください。
謝辞
GhostFree は、脆弱性情報を世界中に無償で公開している 3 つの組織と、CVE を報告している世界中の脆弱性研究者の尽力によって成り立っています。彼らがいなければ、このツールは存在しなかったでしょう。
Google Open Source Security Team — Open Source Vulnerabilities(OSV)
OSV.dev は、GhostFree のすべてのスキャンを支える基盤です。パッケージ名とバージョンを指定して、主要なすべてのパッケージエコシステムにおける既知の脆弱性を検索できる、無料のオープン API を提供しています。また、単一のレスポンスに深刻度スコアと修正版の情報が含まれます。寛大なレート制限と認証不要の設計により、開発者の各マシン上でローカルに実行するツールに最適です。
U.S. National Institute of Standards and Technology — National Vulnerability Database(NVD)
米国商務省内の NIST が管理する National Vulnerability Database は、公開されたすべての CVE について、標準化された CVSS 深刻度ベクトルと CWE 分類を提供する信頼できる情報源です。GhostFree は、CVE ごとのトリアージ中に NVD API 2.0 を呼び出し、開発者が十分な情報に基づいて修復の判断を下すために必要な技術的詳細を提示します。
U.S. Cybersecurity and Infrastructure Security Agency — Known Exploited Vulnerabilities(KEV)
米国国土安全保障省の一部である CISA は、実際に悪用されていることが確認された CVE の厳選リストである Known Exploited Vulnerabilities カタログを公開し、管理しています。GhostFree はこのカタログをダウンロードして利用し、チームがどれだけ急いで対応すべきかを最も大きく左右する問いに答えます。これは今、悪用されているのでしょうか?
私たちの目標は、これらの組織が生み出すセキュリティ情報を、より多くの開発者が、どこで働いていても利用できるようにすることです。安全なインターネットの実現を目指して、多額の公費をかけて収集され、無償で共有されている情報です。こうした脆弱性を狙う悪意ある者たちは眠りません。データも同じです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。