mcpField
V
vector-store-scanner

vector-store-scanner

ローカル
github.com/GuardBeeセキュリティ11 日前に更新

vector-store-scanner について

vector-store-scannerは、ベクトルストアのエンドポイントが認証なしで公開されていないかを調べるセキュリティ担当者向けMCPサーバーです。認証情報を送らず読み取り専用で調査し、インスタンス情報からスキーマ、保存データへと段階的に確認します。

主な機能

  1. 016種類のベクトルストアを検査
  2. 02エンドポイントの種類を自動判定
  3. 03インスタンス情報、スキーマ、データアクセスを確認
  4. 04RedisとPostgresをネイティブプロトコルで検査
  5. 05SARIF 2.1.0形式で結果を出力

活用シーン

  1. 01ベクトルデータベースの未認証アクセスを確認
  2. 02RAGのコレクションや文書の露出を評価
  3. 03エンドポイント検査をCIのセキュリティチェックに追加

MCP 対応

ベクトルストアの未認証公開を調べる`scan_endpoint`と`list_patterns`ツールをMCPクライアントに提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"guardbee-vector-store-scanner": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-vector-store-scanner"
]
}
}
}
起動コマンドnpx -y @guardbee/mcp-vector-store-scanner

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@guardbee/mcp-vector-store-scanner0.2.2

ツール

2

掲載時のツール一覧 · 6 日前に更新

パラメーター型必須説明
tlsbooleanいいえHTTP ベースのプローブでは https:// を使用します(Weaviate/Qdrant/Chroma/Elasticsearch)。デフォルト:false
hoststringはいプローブ対象エンドポイントのホスト名または IP
portnumberいいえプローブするポート(デフォルトではストア種別の標準ポート。例:Qdrant は 6333)
typeenumいいえプローブするストアの種類です。'auto'(デフォルト)は既知の種類を順に試し、エンドポイントのフィンガープリントを判定します。auto | weaviate | qdrant | chroma | elasticsearch | redis | postgres
timeoutMsnumberいいえリクエストごとのタイムアウト(ミリ秒、デフォルト:4000)

詳細

@guardbee/mcp-vector-store-scanner

🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch

npm version npm downloads License: MIT

ベクトルデータベース(またはベクトルインデックスに対応した)エンドポイントを調査し、認証なしでの公開を検出する MCP(Model Context Protocol)サーバーです。オープン状態の Elasticsearch/MongoDB/Redis インスタンスからデータが漏えいするという、現実に繰り返し発生してきたインシデントの原因と同種の設定ミスを、RAG 時代のスタックである Weaviate、Qdrant、Chroma、Elasticsearch/OpenSearch、Redis、Postgres/pgvector を対象に調査します。

あらゆる RAG パイプラインの埋め込みデータは、どこかに保存されています。そのベクトルストアが認証なしでネットワークからアクセス可能な場合、見つけた人は誰でも、検索パイプラインに渡されたすべてのドキュメントを読み取り(多くの場合、書き込みも)できます。チャンクに含まれた機密情報も例外ではありません。

テレメトリはデフォルトで無効です。GUARDBEE_TELEMETRY=1 を設定すると、サーバー、ツール、成功の有無、処理時間、ファイルパスなどの短いパラメーター値を送信します。長い文字列や content、token、password などのフィールドはプレースホルダーに置き換えられます。@guardbee/mcp-telemetry をご覧ください。

Claude ──► vector-store-scanner ──► Your vector-store endpoint
              │
              ├─ weaviate / qdrant / chroma / elasticsearch  (HTTP fingerprint)
              │     info ──► schema/collections ──► actual stored data
              ├─ redis        (raw RESP: PING, no AUTH sent)
              └─ postgres     (raw wire protocol: SSLRequest + StartupMessage, no password sent)

どのように影響が拡大するか

HTTP ベースの各プローブは、「このサービスは稼働しているか」の確認だけでは終わりません。攻撃者がたどるのと同じ経路を、影響が段階的に大きくなる順に調査し、実際に成功した内容のみを報告します。

  1. インスタンス情報(中) — バージョンやビルドの詳細を、認証なしで読み取れるか確認します。単独での影響は小さいものの、サービスが公開されていることを確認でき、既知の CVE の特定にも役立ちます。
  2. スキーマ/コレクション一覧(高) — クラス名またはコレクション名を、認証なしで読み取れるか確認します。実データを読み取る前でも、データモデルが明らかになります。
  3. 実際に保存されたデータ(重大) — 実際のオブジェクト/ポイント/ドキュメントが認証なしで返されるか確認します。これが重要な検出結果です。ポートにアクセスできる人なら誰でも、埋め込みデータ(およびその元になったデータ)を読み取れます。

Redis と Postgres については、HTTP ではなくネイティブのワイヤープロトコルを使って同じ調査を行います。Redis の PING または Postgres の StartupMessage を送るだけで、実際のパスワードを送信することなく、認証が適用されているかどうかを確認できます。認証情報の推測、ブルートフォース、送信は一切行いません。ここで行うのはすべて読み取り専用のフィンガープリンティングです。このモノレポ内のほかの場所にある dns-intelligence や ssl-inspector と同じ種類の調査です。


機能

  • 6 種類のターゲットタイプ:Weaviate、Qdrant、Chroma、Elasticsearch/OpenSearch(HTTP)、Redis(生の RESP)、Postgres/pgvector(生のワイヤープロトコル)
  • 自動検出 — type が指定されていない場合、既知の各タイプを順に試してエンドポイントをフィンガープリントします
  • Redis と Postgres のプロトコルをゼロから実装 — クライアントライブラリへの依存はなく、実際の認証情報が送信されることもありません。Postgres の SSLRequest ハンドシェイク用の TLS アップグレード経路も含まれています
  • 段階的なチェック(情報 → スキーマ → データ)により、「critical」の検出結果は、ポートが応答しただけではなく、実際のデータが読み取られたことを必ず意味します
  • SARIF 2.1.0 出力 — CI/CD との連携(GitHub Code Scanning など)
  • guardbee.yml による設定ファイルのサポート
  • ローカルのモック HTTP/TCP サーバーを使った 22 件の単体テスト。各プローブのフィンガープリントの一致・不一致と、各段階のチェックを網羅しています

クイックスタート

Claude Desktop / MCP クライアント
{
  "mcpServers": {
    "guardbee-vector-store-scanner": {
      "command": "npx",
      "args": ["-y", "@guardbee/mcp-vector-store-scanner"]
    }
  }
}
CLI(CI/CD)
npx @guardbee/mcp-vector-store-scanner scan my-qdrant.internal --type=qdrant --fail-on=high --format=sarif > results.sarif

MCP ツール

ツール説明
scan_endpoint単一のホスト/ポートをプローブし、認証なしでの公開を検出します
list_patternsサポートされているストアタイプと、各チェックの対象を一覧表示します

検出対象

ストアチェック重大度
Weaviate認証なしで /v1/meta を読み取れる中
Weaviate認証なしで /v1/schema を読み取れる — クラス名が明らかになります高
Weaviate認証なしで /v1/objects から実際のデータが返される重大
Qdrant認証なしで / のインスタンス情報を読み取れる中
Qdrant認証なしで /collections を読み取れる高
Qdrant認証なしで /collections/<name>/points/scroll から実際のデータが返される重大
Chroma認証なしでハートビートに到達できる中
Chroma認証なしで /collections を読み取れる高
Elasticsearch/OpenSearch認証なしでクラスター情報を読み取れる中
Elasticsearch/OpenSearch認証なしで /_cat/indices を読み取れる高
Elasticsearch/OpenSearch認証なしで /<index>/_search から実際のドキュメントが返される重大
RedisAUTH なしで PING が受け付けられる重大
Postgres/pgvectorTLS が提示されない中
Postgres/pgvectorパスワードチャレンジなしで AuthenticationOk が返される重大

設定(guardbee.yml)

vector-store-scanner:
  fail-on: high       # any | critical | high | medium | low | none
  timeout-ms: 4000

制限事項(設計上)

  • Chroma では実際のドキュメントの読み取りをチェックしません。データ読み取り API はバージョンによって大きく異なるため、このスキャナーはコレクション一覧のレベルでチェックを終了します(それでも、主要な「認証が一切ない」設定ミスを検出するには十分です)。
  • Milvus はサポートされていません。主要な API が gRPC であり、他のストアのように軽量なプローブではフィンガープリントできないためです。
  • このツールがチェックするのは認証なしでの読み取りアクセスであり、認証レイヤーが機能している場合の認可の不備(有効だが過剰な権限を持つ API キーなど)ではありません。認証情報を使わない外部からのプローブでは対象外です。

開発

npm run build
npm test             # 22 unit tests

ライセンス

MIT — GuardBee

フィードバック

質問、アイデア、または誤検知がありますか?GitHub Discussions でスレッドを開始するか、issue を作成してください。GuardBee が役に立った場合は、リポジトリに ⭐ を付けていただけると、ほかの人にも見つけてもらいやすくなります。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。