系统:运行中
← 返回所有攻击
AGENTS CRITICAL NEW

mcp-pinot:一个未认证的 MCP 服务器成了混淆代理

2026 年 6 月披露的漏洞显示,一个面向 Apache Pinot 的 MCP 服务器默认绑定到 0.0.0.0 且关闭 OAuth,使任何网络可达的调用者都能执行其高权限数据库工具。

2026-07-04 // 5 min affects: mcp-pinot, model-context-protocol, apache-pinot

这是什么?

2026 年 6 月 18 日,mcp-pinot 中公开了一个严重漏洞。该项目是一个开源的 Model Context Protocol(MCP)服务器,让 LLM 智能体能够查询并管理 Apache Pinot 实时分析集群。在 3.0.1 及更早版本中,服务器启动的 HTTP MCP 端点默认绑定到 0.0.0.0:8080,且默认关闭认证。任何能够到达该端口的调用者——同一网络中的机器、相邻容器,或防火墙配置不当而暴露的任何来源——都可以在不登录的情况下调用服务器暴露的每一个工具。

维护方(StarTree)已在 3.1.0 版本中修复该问题,该版本于 2026 年 5 月 25 日在公开披露之前发布。该漏洞评分为 10.0(严重),是一个典型的混淆代理(confused deputy)案例:造成破坏的是服务器的凭据,而非攻击者的凭据。

工作原理

这是一个配置与设计缺陷,而非内存破坏漏洞,因此其机制无需可利用的载荷即可说明。

mcp-pinot 服务器使用从环境变量加载的服务账户(一个令牌,或用户名与密码)连接到其 Pinot 集群。这些凭据通常是高权限的,因为服务器需要读取表、列出模式,有时还要写入配置。当 MCP 客户端调用诸如 read_query 之类的工具时,服务器会使用它自己的凭据把该调用转发给 Pinot。

在有漏洞的默认配置中,没有任何机制对这种转发加以过滤。HTTP 监听器在所有网络接口(0.0.0.0)上响应,而非仅限本地回环(127.0.0.1),且 OAuth 处于关闭状态。因此,一个未认证的请求可以直接到达工具层,并借用服务器的身份进入数据库。所暴露的工具覆盖了集群的完整面:read_query 执行任意 SELECT 查询,list_tables 及各类元数据工具枚举模式与配置,而 create_schemaupdate_schemaupdate_table_config 会在服务账户拥有写权限之处修改集群。其中一个工具 reload_table_filters 甚至会把服务器先前和新的过滤器列表返回给调用者——泄露了本应用于约束查询的白名单。

正是这种影响范围使它成为混淆代理,而不只是一个暴露的端点:有漏洞的 MCP 组件位于一条安全边界上,但其凭据作用于另一条边界(Pinot 集群)。攻击者从不需要知道数据库口令;代理替他把凭据花了出去。

为什么重要

MCP 服务器正在成为智能体与真实系统之间的标准粘合层,每一个都是持有某些有价值资源凭据的小型代理。因此,这些服务器的默认网络姿态是一项安全决策,而非便利设置。为了「让另一台机器也能用」而绑定到 0.0.0.0,会悄悄把本地工具变成网络服务——如果该服务在无认证的情况下把一个高权限数据库账户摆到前面,波及范围就是整个后端。

这并非孤例。同一种形态——一个贴近 AI 的 HTTP 服务器在所有接口上监听、默认关闭认证——在 2026 年早些时候也在 MCPJam 的 MCP 检查器中造成了另一个严重的远程代码执行缺陷,并呼应了「致命三要素」模式:系统同时具备高权限访问、不可信输入与外泄通道。各国指南已经跟进:NSA 与盟国机构近期关于 MCP 的设计考量强调认证、服务器信任与传输控制,正是因为这些代理不断以开放状态发布。对任何部署 MCP 服务器的人而言,教训是:其默认配置本身就是攻击面的一部分,甚至在智能体做出任何巧妙操作之前就已如此。

防御

默认绑定本地回环。 开发用或单主机的 MCP 服务器应监听 127.0.0.1,绝不应是 0.0.0.0,除非经过明确且评审过的暴露决定。就 mcp-pinot 而言,如果尚无法升级,请设置 MCP_HOST=127.0.0.1

切勿在网络上暴露未认证的工具服务器。 如果确实需要远程访问,先要求认证。mcp-pinot 3.1.0 在未启用 OAuth 时会拒绝非回环的 HTTP/HTTPS;请启用它(OAUTH_ENABLED=true),并把端点置于 VPN 或 SSH 隧道之后,而不是暴露在公网上。

只授予服务器所需的最小权限。 把 MCP 服务器背后的服务账户当作面向互联网的账户来对待。尽可能将其权限收缩为只读,限制到智能体所需的具体表,并把读与写职责分离,使读工具无法悄然获得写能力。

约束工具,而不仅是网络。 即使启用了认证,服务器端的查询校验也很重要。3.1.0 的修复为 read_query 增加了基于解析器、单语句、只读的校验,使「读」工具无法被诱导为多语句或写入行为。对任何接受自由格式输入的工具,都应采用同样的严格标准。

在部署工具链中把暴露设为可选启用。 修复版本还把其 Helm 暴露改为可选启用且受 OAuth 约束。请把 Kubernetes 与容器清单默认设为关闭,以免一份复制粘贴的 chart 意外发布一个带凭据的代理。

状态

项目参考日期备注
公告GHSA-73cv-556c-w3g6 / CVE-2026-492572026-06-18关键功能缺少认证(CWE-306);CVSS 3.1 = 10.0(AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
受影响mcp-pinot < 3.1.0HTTP MCP 服务器默认绑定 0.0.0.0:8080,OAuth 默认关闭
已修复v3.1.02026-05-25默认绑定 127.0.0.1;未启用 OAuth 时拒绝非回环;Helm 暴露改为可选启用并受 OAuth 约束;为 read_query 增加只读单语句校验
根因混淆代理服务器端 Pinot 服务账户凭据被用于服务未认证的调用者

实用的教训简明且可迁移:MCP 服务器是一个带凭据的代理,其默认监听地址与认证姿态就是安全控制。请检查你运行的每一个 MCP 服务器绑定在何处、在转发工具调用之前是否进行认证——因为它借出去的凭据是你的。

Sources