vector-store-scanner について
vector-store-scannerは、ベクトルストアのエンドポイントが認証なしで公開されていないかを調べるセキュリティ担当者向けMCPサーバーです。認証情報を送らず読み取り専用で調査し、インスタンス情報からスキーマ、保存データへと段階的に確認します。
主な機能
- 016種類のベクトルストアを検査
- 02エンドポイントの種類を自動判定
- 03インスタンス情報、スキーマ、データアクセスを確認
- 04RedisとPostgresをネイティブプロトコルで検査
- 05SARIF 2.1.0形式で結果を出力
活用シーン
- 01ベクトルデータベースの未認証アクセスを確認
- 02RAGのコレクションや文書の露出を評価
- 03エンドポイント検査をCIのセキュリティチェックに追加
MCP 対応
ベクトルストアの未認証公開を調べる`scan_endpoint`と`list_patterns`ツールをMCPクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 6 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| tls | boolean | いいえ | HTTP ベースのプローブでは https:// を使用します(Weaviate/Qdrant/Chroma/Elasticsearch)。デフォルト:false |
| host | string | はい | プローブ対象エンドポイントのホスト名または IP |
| port | number | いいえ | プローブするポート(デフォルトではストア種別の標準ポート。例:Qdrant は 6333) |
| type | enum | いいえ | プローブするストアの種類です。'auto'(デフォルト)は既知の種類を順に試し、エンドポイントのフィンガープリントを判定します。auto | weaviate | qdrant | chroma | elasticsearch | redis | postgres |
| timeoutMs | number | いいえ | リクエストごとのタイムアウト(ミリ秒、デフォルト:4000) |
詳細
@guardbee/mcp-vector-store-scanner
🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch
ベクトルデータベース(またはベクトルインデックスに対応した)エンドポイントを調査し、認証なしでの公開を検出する 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 ベースの各プローブは、「このサービスは稼働しているか」の確認だけでは終わりません。攻撃者がたどるのと同じ経路を、影響が段階的に大きくなる順に調査し、実際に成功した内容のみを報告します。
- インスタンス情報(中) — バージョンやビルドの詳細を、認証なしで読み取れるか確認します。単独での影響は小さいものの、サービスが公開されていることを確認でき、既知の CVE の特定にも役立ちます。
- スキーマ/コレクション一覧(高) — クラス名またはコレクション名を、認証なしで読み取れるか確認します。実データを読み取る前でも、データモデルが明らかになります。
- 実際に保存されたデータ(重大) — 実際のオブジェクト/ポイント/ドキュメントが認証なしで返されるか確認します。これが重要な検出結果です。ポートにアクセスできる人なら誰でも、埋め込みデータ(およびその元になったデータ)を読み取れます。
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 から実際のドキュメントが返される | 重大 |
| Redis | AUTH なしで PING が受け付けられる | 重大 |
| Postgres/pgvector | TLS が提示されない | 中 |
| 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 が役に立った場合は、リポジトリに ⭐ を付けていただけると、ほかの人にも見つけてもらいやすくなります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。