mcpField
V
vector-store-scanner

vector-store-scanner

本地服务
github.com/GuardBee安全11 天前更新

关于 vector-store-scanner

vector-store-scanner 是供安全团队检查向量存储端点是否存在未认证暴露的 MCP 服务。它以只读方式探测受支持的数据库,从实例信息逐步检查到架构和数据访问,且不会发送凭据。

主要功能

  1. 01探测六种向量存储类型
  2. 02自动识别端点类型
  3. 03检查实例信息、架构和数据访问
  4. 04使用 Redis 和 Postgres 原生协议探测
  5. 05输出 SARIF 2.1.0 结果

适用场景

  1. 01检查向量数据库是否允许未认证访问
  2. 02评估 RAG 集合和文档的暴露情况
  3. 03将端点扫描纳入 CI 安全检查

MCP 相关

向 MCP 客户端提供 `scan_endpoint` 和 `list_patterns` 工具,用于检查向量存储端点是否存在未认证暴露。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 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(模型上下文协议)服务,用于探测向量数据库(或支持向量索引的)端点是否存在未认证暴露——这类错误配置曾导致 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 就足以判断是否强制进行身份验证,全程无需发送真实密码。绝不会猜测、暴力破解或发送任何凭据——此处的所有检查都属于只读指纹识别,与此 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 对你有用,请在代码库点个 ⭐,帮助其他人发现它。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。