Google 开源的多智能体联邦框架 OSS Agent Mesh(SAM)被查出两枚 9.3 分漏洞:一条入口路径根本没做授权校验,另一条让人可以自助注册进网格。两枚 CVE 相隔 184 毫秒进入 NVD。
事件概述
受影响的是 google/agentmesh(CVE 记录里沿用旧名 google/sam,2026 年 4 月创建,Apache-2.0)。它把 MCP 服务器、A2A 智能体和推理端点用 libp2p 串成一张网格,访问控制依赖控制面签发的 Biscuit 能力令牌。
10 月 19 日,NVD 先后收录 CVE-2026-102503 与 CVE-2026-103091,均由 Google 自己的 CNA 分配,CVSS 4.0 均为 9.3,三项影响全高,无需权限与用户交互。
技术细节
CVE-2026-102503 属于”安全控制只挂了一处”。节点对外暴露两类 libp2p 通道:MCP 协议流那条包了 WithBiscuitAuth 与 Authorize;并行的 /libp2p-http 入口(cmd/sam-node/node.go 的 StartIngressServer)直接落到同一批后端处理函数,一次授权检查都没有。
后果分三层:任何能拨通节点的对等端,不带令牌即可调用任意已注册后端,包括被策略明确拒绝的工具;对 stdio 型 MCP 服务,入口把攻击者构造的 JSON-RPC 直接写进后端子进程的标准输入,等于潜在的命令执行原语;对 URL 型服务,入口做反向代理,等于一台通往内网的未认证 SSRF 跳板。
官方公告称这是全树扫描得出的结论:整个代码树里 WithBiscuitAuth 只挂在一个生产处理函数上。6 月 10 日完成运行时验证——只持临时密钥、完全未入网的对等端,调用被拒列表中的工具经 /libp2p-http 返回 200 并执行成功,同样调用走 MCP 通道则被拒绝。默认配置还叠了两层风险:节点绑 0.0.0.0 并在公共测试网做 DHT 发现;连接闸门只是黑名单。
CVE-2026-103091 是入网侧的另一半:控制面 GET /info 无认证吐出 OIDC 配置,POST /register 对任何持有有效 OIDC 令牌者自动放行,不做 claim 过滤与黑名单检查;默认策略又把 sam:system:authenticated 绑到通配的服务与目标上。两步相加,外部人员可以给自己签发一张对后端拥有完整读写执行权限的网格凭证。
影响评估
项目今年 4 月才创建,仍在 alpha 阶段,现实部署量有限。但”未认证即全通”意味着节点只要在不可信网络可达,随时可能被顺手打掉。更值得留意的是它示范的模式:MCP 网关、A2A 代理这类新基础设施,常在一条路径上做对鉴权,在另一条路径上忘掉。
修复建议
- 升级到 0.1.0-alpha.3 或更高。修复提交
433bc99(PR #171)在所有 ingress 请求上强制VerifyBiscuitToken,并在反代下游前剥离重写身份头。 - 部分聚合平台称入网侧 fail-closed 默认策略要到 0.1.0-alpha.9 才落地,与官方公告口径不一,直接升到最新 release 最稳。
- 暂无法升级的,把 libp2p 端口从公网收回,只允许可信对等端访问。
- 把
sam:system:authenticated的通配绑定改成显式服务清单,入网申请加人工审批。
grep -rn "WithBiscuitAuth" cmd/ | grep -v _test