Grafana MCP Server 暴露未经身份验证的 SSE 接口,允许远程操纵仪表盘
作者: Evan Harris
风险: 低
受影响组件: Grafana MCP Server
引言
作为我们对 Model Context Protocol (MCP) 服务器持续开展的安全研究的一部分,我们在 Grafana MCP Server 中发现了一处安全缺陷,它通过未经身份验证的网络暴露,允许对 Grafana 实例进行未授权访问。
概述
Grafana MCP Server 在使用 -t sse 标志启动时,会暴露一个未经身份验证的 Server-Sent Events (SSE) 接口。当通过 MCP Server 的 README 中提供的 Docker 命令运行时,该接口默认绑定到 0.0.0.0:8000。这种配置允许具有网络访问权限的远程攻击者在无需身份验证的情况下与受害者的 Grafana 实例进行交互。
技术细节
问题所在
当通过 Docker 配置为 SSE 传输时,该服务器:
- 绑定到
0.0.0.0:8000,使其可从网络上的任意主机访问 - 未对
/sse端点提供任何身份验证机制 - 信任任意已连接的客户端执行特权 Grafana 操作
- 使用受害者的
GRAFANA_API_KEY以其名义执行操作
存在漏洞的配置
按照项目 README 并添加 SSE 传输:
docker run --rm -p 8000:8000 \
-e GRAFANA_URL \
-e GRAFANA_API_KEY \
mcp/grafana -debug -t sse
这会将端点 http://victim_ip:8000/sse 暴露给整个网络。
攻击场景
受害者侧的配置
一名按照文档操作的用户:
- 下载 Grafana MCP Server 的 Docker 镜像
- 为其 Grafana 实例配置环境变量
GRAFANA_URL和GRAFANA_API_KEY - 通过向 Docker 命令添加
-t sse来启用 SSE 传输 - 在不知情的情况下将
http://their_ip:8000/sse暴露给网络层面的攻击者
攻击者的利用
具有网络访问权限的攻击者可以:
- 发现暴露的端点,地址为
http://victim_ip:8000/sse - 使用 MCP Inspector 连接:
npx @modelcontextprotocol/inspector sse --port 8000 - 使用可用的 Grafana 工具执行未授权操作
- 操纵仪表盘,包括列出、创建、更新或删除它们
概念验证
攻击演示
借助 MCP Inspector,攻击者可以连接到暴露的 SSE 端点并执行 Grafana 操作:
- 列出团队(teams),以了解组织结构
- 列出仪表盘,以识别敏感的商业智能信息
- 创建仪表盘,以注入恶意内容
- 更新仪表盘,以修改现有的可视化内容
- 访问数据源及其他特权 Grafana 功能
影响评估
该攻击途径可导致:
机密性破坏
- 数据源发现,暴露后端系统和配置
- 仪表盘枚举,泄露敏感的商业智能信息
- 通过 MCP 接口造成的用户和团队信息泄露
完整性损害
- 恶意内容注入,可能误导用户
- 配置篡改,影响可视化的准确性
- 通过创建、修改或删除进行的仪表盘操纵
可用性影响
- 通过删除或损坏仪表盘造成的服务中断
- 通过系统过载造成的拒绝服务可能性
- 通过过量工具请求造成的资源耗尽
风险因素
- 网络访问要求:攻击者需要对受害者具有网络层面的访问权限
- 无身份验证:任意客户端均可连接并执行特权操作
- Docker 默认绑定:
0.0.0.0暴露增加了攻击面 - 无声运行:攻击可能在用户不知情的情况下发生
建议的缓解措施
面向用户
- 避免在共享或不受信任的网络上使用
-t sse - 使用防火墙或 VPN 实施网络层面的限制
- 通过将 Docker 端口映射修改为
127.0.0.1:8000:8000来使用 localhost 绑定 - 监控 Grafana 日志,以发现异常的 API 活动
披露时间线
- 2024-05-22:通过 Intigriti VDP 发现漏洞并报告给 Grafana
- 2024-05-23:Grafana 确认收到报告
- 2024-05-23:报告被 Grafana 团队标记为 “Informative”
- 2024-05-23:Grafana 授权公开发布研究结果
- 2025-09-02:公开披露并发布安全公告
结论
Grafana MCP Server 中未经身份验证的 SSE 接口表明,在将 AI 代理与企业系统连接起来的开发工具中,安全的默认设置至关重要。
尽管网络访问要求限制了攻击面,但部署 MCP 服务器的组织应实施纵深防御策略,并对网络暴露风险保持警觉,尤其是在共享环境中。