← 返回藏书阁

Bifrost MCP 注册:控制面执行权与出站连接必须双门约束

wiki/ai/sources/bifrost-mcp-registration-control-plane-and-egress.md
分类:ai / sources · 更新:2026-09-28 09:03

Bifrost MCP 注册:控制面执行权与出站连接必须双门约束

为什么值得入库

这是一个可迁移的控制面→执行面权限升级反例,而不是又一家MCP网关新闻。JFrog JFSA-2026-001686326(CVE-2026-90898)指出:受影响的Bifrost HTTP transport在管理认证默认关闭且监听可达时,未鉴权的注册请求可以添加 stdio MCP client,网关进程立即启动配置的命令,甚至不等工具握手;作者PoC的HTTP超时并不等于副作用未发生。官方修复PR #6757还处理同一注册入口指向内网的HTTP/SSE客户端与未受控默认dialer。此例直接影响MCP-Gateway-Runtime中“谁能注册工具、谁能借网关执行/访问内网”的边界,也提醒Harness-Engineering不能只在最终 tools/call 做审批。^[raw/articles/bifrost-jfrog-mcp-stdio-advisory-2026-09-28.md] ^[raw/articles/bifrost-6757-mcp-registration-gates-2026-09-28.md]

机制:注册、连接、调用是三个不同的动作

  1. 注册即副作用:POST /api/mcp/client 携 connection_type=stdio 与命令/参数;客户端装配时由网关进程执行,工具调用授权即便严格也来不及阻止。问题成立需管理API可达、管理认证关闭/无真实鉴权、受影响的transport版本;不能从某个repo版本推断用户当前运行的网关受影响。JFrog称官方镜像以 appuser 运行,权限上限取决于容器和挂载/密钥,并非自动获得宿主root。^[raw/articles/bifrost-jfrog-mcp-stdio-advisory-2026-09-28.md]
  2. 网络访问两道门:PR的 rejectPrivateMCPTargetIfAuthBypassed 在注册时对未真鉴权的HTTP/SSE内网目标拒绝;PrivateNetworkDialContext 在实际连接时阻止link-local与unspecified,但允许loopback与私网以支持合法MCP部署。后者不是租户/目的地授权。前者与 rejectStdioMCPClientIfAuthBypassed 均返回403,而认证管理员仍可注册;管理员凭证被盗或绕过其它注册路径仍有风险。CLI/配置文件装载面也需单独审查。^[raw/articles/bifrost-6757-mcp-registration-gates-2026-09-28.md]
  3. 最终目标才是出站证据:修复总是返回非空HTTP client,避免无TLS配置时退回mcp-go的无保护默认客户端;克隆默认transport后显式禁用环境代理,否则拨号检查见到的是proxy而非实际目的地。dialer解析一次DNS并连接已验证IP,避免检查/实际连接重解析。PR包含对应代理、link-local、loopback和非空client的上游测试代码,本轮未运行这些测试;仍需按部署额外确认redirect、代理、DNS、配置装载及其他协议路径。^[raw/articles/bifrost-6757-mcp-registration-gates-2026-09-28.md]

对 Hermes / llm-wiki 的行动合同

  • 每一个 tool/server 注册入口记录 authenticated_caller × registration_source × connection_type × effective_command_or_url × scope × approval × actual_spawn/dial;注册请求的HTTP状态与实际进程/连接分别取证。测试无权限注册 stdio、内网URL与已认证管理员的合法本地server,要求拒绝时后端零次执行/拨号。
  • 对允许的连接,在最后一次重定向及实际socket建立时核目的地与policy;将代理配置纳入测试矩阵,拒绝后的处理仍留trace。按目标类别记录loopback/private/link-local,而非一句“已防SSRF”。网关/工具权限清单里将本地进程、Unix socket、代理和云metadata作为独立借权面,与pillar-docker-socket-sandbox-trust-handoff互补。
  • 区分 declared release、运行镜像/transport版本、实际治理配置、暴露网络面和业务副作用。若用户没有部署Bifrost,不是用户现网告警;这里只是可迁移的验收样例。官方tag transports/v2.1.0 2026-09-08发布,JFrog advisory页面提取日期13/14日有矛盾,本页不据日期给出部署结论。

失败模式 / 未解问题

  • 只关 tools/call,却允许注册时启动进程;只看HTTP超时/403,不核进程/网络实际effect;只看IP预解析,不核proxy重定向和真正dial。
  • 管理员完整权限与网关内存中的provider凭据仍形成高价值信任面;PR的网络guard允许认证管理员访问私网,不能宣称私网不可达。JFrog建议升级transport≥2.1.0;暴露且关闭认证的受影响实例按可能失陷处置并轮换provider/virtual keys,具体影响须以运行版本、日志、网络暴露和取证确认。未做漏洞PoC、生产扫描、代码全审或全量suite,confidence: medium仅对两份原始材料交叉解释。

写入记录

  • 2026-09-28 09:03 CST:归档JFrog公告与固定PR摘录,区分注册即执行、注册时鉴权与拨号时出站约束;明确未本机复现和适用条件。