← 返回藏书阁

Grafana MCP:会话不是身份,凭据隔离不是出站隔离

wiki/ai/sources/grafana-mcp-session-identity-and-egress-boundaries.md
分类:ai / sources · 更新:2026-09-10 12:06

Grafana MCP:会话不是身份,凭据隔离不是出站隔离

结论与知识点轴

MCP Gateway / sandbox-security / harness-runtime / benchmark-evaluation。 此案例把三个经常混同的边界拆开:会话状态、调用者权限、服务器可到达的网络。检查 session ID 的格式不是认证;防止 Grafana token 发往其他站点,也不等于阻止服务器替调用者访问内部服务。

这是对 MCP-Gateway-Runtime 的具体反例,而不是又一个 gateway 功能清单。用户关注监控、告警与内部服务;一旦把观测系统接入 agent,服务器的服务账号及网络位置都成为可被委托的权限。本文没有检查用户是否部署该组件,不能据此宣称用户环境存在漏洞。

来源、时间与证据等级

  • Pillar 原始研究:2026-09-02,已读取完整 HTML 正文;不是今天发布。
  • Grafana 官方 CVE 公告:2026-08-11,CVE-2026-19516;公告列 fixed versions >=1.1.0
  • 官方 v1.1.0 release:2026-08-10。已核对新增可选入站认证和删除 X-Grafana-URL 的两个独立条目。
  • 证据到达原文、官方公告和 release 层;未部署、未复现、未审计修复 diff。正文与 release 共存于同一 raw bundle,按小节可追溯。

机制:谁提供指令,谁提供权限

1. Session 是状态引用,不是访问凭据

研究者报告,受影响部署接受本地生成、格式正确但从未签发的 Mcp-Session-Id,并允许无凭据调用者列举及调用工具。真正访问 Grafana 时却使用 MCP server 环境中的服务账号 token:调用者不持有 token,也获得了代行能力。这里失效的是入站认证与授权,不是 token 被盗。^[raw/articles/grafana-mcp-session-identity-and-egress-boundaries-2026-09-10.md]

因此控制面需要分别判断:身份是否可信、是否有权调用具体工具、session 是否属于当前身份。只验证 session 字符串形状、Host 或 Origin,不能替代这些判定。这也是 Harness-Engineering 的动作执行边界:身份和授权应在 tool dispatch 前生效,而不是只放进模型上下文。

2. 凭据不外发,网络权限仍可能被借用

官方公告指出,先前 CVE-2026-15583 的修复阻止服务账号 token 发往非预期目的地,但未限制目的地本身。grafana_api_request 曾允许调用者通过 X-Grafana-URL 选择目标,并控制 method/path/body;服务器仍可连接自身能访问而调用者不能访问的地址,返回响应。网络可达性本身就是权限,不需要附带 Grafana token 才能产生风险。^[raw/articles/grafana-mcp-session-identity-and-egress-boundaries-2026-09-10.md]

研究中的内部/metadata 演示使用受控 canary,不能推导“所有实例均能访问真实云元数据”。能否造成具体损害取决于目标版本、网络位置、启用工具、出站策略和可达服务。

3. 修复版本与运行配置是两张验收单

v1.1.0 的 release 明确删除未公开支持的 X-Grafana-URL header,同时新增 --server-auth-token / MCP_GRAFANA_SERVER_TOKEN。入站认证只在配置 token 后启用;未配置时,非 loopback 绑定仍启动,只记录 security error。因此“已升级”不能替代“已启用认证”,也不能把“未配 token”的风险笼统称为仍存在同一个已修 SSRF。^[raw/articles/grafana-mcp-session-identity-and-egress-boundaries-2026-09-10.md]

对 Hermes / 企业 MCP 的可执行启发

以下是迁移建议,不是已部署控制措施

检查对象应验证的行为不能接受的替代证据
入站身份无 token / 错 token 请求在 tool dispatch 前被拒绝有 session ID、返回了 401 文本但工具仍执行
每动作授权当前身份只能调用允许的工具及参数范围服务账号本身拥有权限
出站目的地默认固定受信 origin;对实际解析地址、重定向和连接执行策略只移除 Authorization header
凭据边界每个目标、租户及身份按需取凭据,日志不记录密钥所有工具共享高权限环境 token
修复闭环release/版本、认证配置、拒绝日志及 canary 状态一起留证“升级到最新”一句话

联邦 gateway 不能把上游的“已认证”无限传递为下游全权限。服务账号、内网、代理和可选 header 都应进入 authority inventory;实际访问应按 caller × tool × destination 求交。与 a2a-tck-conformance-coverage-and-security-boundaries 一样,跨 agent 回调也需要独立的目的地约束。

边界与未解问题

  • 本文不提供或执行针对真实服务的攻击;部署验证应使用自有 canary 和不含真实数据的隔离环境。
  • 组织内网可能是合法目标;不能机械封禁所有私网。应明确允许的内部服务、租户、身份和连接策略。
  • gateway 代理是控制路径,不保证不存在直连旁路;需把 connector/backend 的直接暴露纳入验证。
  • redagentbench-state-grounded-safety-measurement 提醒:看到拒绝回答还要看服务端是否已发生动作;pillar-docker-socket-sandbox-trust-handoff 则说明本地 daemon 也是隐式权限来源。

写入记录

  • 2026-09-10 09:06 CST:新增完整研究、官方 CVE 与 release 对读,区分 session、身份、凭据、网络边界及“版本修复”和“配置启用”;未做运行环境漏洞断言。
  • 2026-09-10 12:03 CST:补充正文到 Harness-Engineering 的机制关联,形成 MCP Gateway / Harness 双概念入口;未探测或变更运行环境。