关于 vector-store-scanner
vector-store-scanner 是供安全团队检查向量存储端点是否存在未认证暴露的 MCP 服务。它以只读方式探测受支持的数据库,从实例信息逐步检查到架构和数据访问,且不会发送凭据。
主要功能
- 01探测六种向量存储类型
- 02自动识别端点类型
- 03检查实例信息、架构和数据访问
- 04使用 Redis 和 Postgres 原生协议探测
- 05输出 SARIF 2.1.0 结果
适用场景
- 01检查向量数据库是否允许未认证访问
- 02评估 RAG 集合和文档的暴露情况
- 03将端点扫描纳入 CI 安全检查
MCP 相关
向 MCP 客户端提供 `scan_endpoint` 和 `list_patterns` 工具,用于检查向量存储端点是否存在未认证暴露。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 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(模型上下文协议)服务,用于探测向量数据库(或支持向量索引的)端点是否存在未认证暴露——这类错误配置曾导致 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 就足以判断是否强制进行身份验证,全程无需发送真实密码。绝不会猜测、暴力破解或发送任何凭据——此处的所有检查都属于只读指纹识别,与此 monorepo 中其他位置的 dns-intelligence 和 ssl-inspector 所执行的探测属于同一类。
功能
- 6 种目标类型:Weaviate、Qdrant、Chroma、Elasticsearch/OpenSearch(HTTP)、Redis(原始 RESP)、Postgres/pgvector(原始线协议)
- 自动检测 — 未指定
type时,依次尝试每种已知类型,对端点进行指纹识别 - 从头实现协议,适用于 Redis 和 Postgres — 不依赖客户端库,不会发送真实凭据;包含 Postgres
SSLRequest握手的 TLS 升级路径 - 逐级执行检查(信息 → 架构 → 数据),因此“严重”发现始终表示确实读取了真实数据,而不只是端口有响应
- SARIF 2.1.0 输出 — 集成 CI/CD(GitHub Code Scanning 等)
- 通过
guardbee.yml支持配置文件 - 22 个单元测试使用本地模拟 HTTP/TCP 服务,覆盖每个探测器匹配和不匹配的指纹,以及每个升级级别
快速开始
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 | 无需认证即可访问 heartbeat | 中 |
| 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 在不同版本间差异显著,因此此扫描器对 Chroma 只检查到集合列表级别(这仍足以检测主要的“完全未启用认证”配置错误)。
- 不支持 Milvus — 其主要 API 使用 gRPC,不像其他存储那样能通过轻量探测进行指纹识别。
- 此工具检查的是未认证读取访问,而不是有效认证层之后的授权漏洞(例如有效但权限过大的 API 密钥)— 这超出了外部、无凭据探测的范围。
开发
npm run build
npm test # 22 unit tests
许可证
MIT — GuardBee
反馈
有问题、想法或发现误报?请在 GitHub Discussions 中发起讨论,或提交问题。如果 GuardBee 对你有用,请在代码库点个 ⭐,帮助其他人发现它。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。