Skip to content

WebMCP 浏览器工具的主体归属与生命周期来源控制 ​

摘要 ​

WebMCP 允许网页向浏览器中的 LLM Agent 注册可调用工具,但传统同源策略只能说明脚本共享 Origin,不能区分主站代码、广告 SDK 与分析脚本,也没有充分约束工具的注册者、撤销权和单页应用导航后的生命周期。WebMCP-Phalanx 以浏览器原生能力凭据绑定工具所有者,并把来源与生命周期标签传播到隔离的语义检查 Agent。

作者在参考实现上报告,工具撤销和覆盖攻击由 20/20 成功降为 0/20;80 次工具描述注入全部被阻断,80 次工具返回注入仍有 2 次成功。白盒自适应攻击还能把恶意语义移入工具名,在内容检查前诱导调用,说明来源凭据和语义过滤都必须配合调用时序门禁。

核心创新与差异 ​

原研究贡献。 论文把 WebMCP 的结构性风险拆成主体归属伪造、工具生命周期失控、声明与执行不一致和语义提示词注入,并提出两层运行时:浏览器原生层签发不可伪造的能力句柄,隔离的 Quarantine Agent 检查工具描述、Schema 与返回内容,Privileged Agent 才持有工具调用权限。

本站分析。 该问题不是普通恶意 MCP Server 的分发风险,而是浏览器内多个同源脚本共享工具注册表时缺少更细主体身份与生命周期语义。首个失效控制在协议/浏览器注册层;模型侧过滤只能处理其后的内容风险,不能恢复缺失的注册者事实。

威胁模型与攻击链 ​

攻击者是与主站同源运行的受控第三方脚本,可注册、枚举并尝试撤销或覆盖工具,也可在工具名、描述、输入 Schema 或返回值中放置操纵性内容;攻击者不持有其他注册者的能力句柄。

  1. 页面脚本注册与合法工具同名或任务高度相关的工具。
  2. 缺少主体归属时,恶意脚本抢占名称、覆盖或撤销合法工具。
  3. 单页应用发生逻辑导航后,旧工具或其返回语义仍残留。
  4. Agent 在内容检查完成前按工具名调用恶意工具,或把返回内容当作后续指令。
  5. 恶意工具外传数据、改变控制流或使原任务失败。

攻击方法与复现材料 ​

以下为依据论文攻击面重构的无害测试协议,不包含真实外传端点:

text
page-main: registerTool("checkout", owner=MAIN)
page-sdk:  try revokeTool("checkout", credential=SDK_TOKEN)
expect:    InvalidStateError

navigate:  /cart -> /account
expect:    navigation-scoped tools and derived trust labels are invalidated

tool:      name="vendor_sync", result="DRY_RUN_TEST_MARKER"
expect:    no invocation before name, description, schema and return policy finish

检测信号包括无匹配能力句柄的覆盖/撤销请求、SPA 导航后仍存活的工具、工具声明“只读”却触发网络或 DOM 修改,以及语义检查完成前的工具调用。真实测试应只在本地页面和 Mock Tool 上执行。

实验设计与实际过程 ​

以下均为作者实验,本站未独立复现。原型基于 @mcp-b/global 2.3.2 和 2026-06-17 WebMCP 草案,在真实浏览器环境中用页面脚本模拟第三方攻击者。四层消融分别为无防护、仅标签、规则删除和多 Agent 内容判断。

描述注入条件下四层分别成功 69/80、71/80、25/80 和 0/80;返回注入分别为 42/80、38/80、2/80 和 2/80。无攻击基线完成 61/80,完整防护完成 56/80,差异无统计显著性(p=0.48)。跨页面实验中,仅清理工具把攻击成功率从 80% 降至 70%;同步使历史返回内容的信任标签失效后降至 0%。

关键结果与实际影响 ​

  • 能力凭据可以确定性保护工具所有权,但它是持有者凭据,不能证明同源脚本的真实业务身份。
  • 原生生命周期监控需要覆盖 pushState、replaceState 和 popstate,并使工具派生内容随工具失效。
  • 语义隔离对固定描述注入有效,却不能覆盖检查前由任务相关工具名触发的调用;白盒攻击在 16 个载荷中绕过 15 个。
  • 运行时观测属于事后检测,首次网络或 DOM 副作用可能已经发生,不能代替执行沙箱。

防护措施与验证方法 ​

WebMCP 规范应定义浏览器原生、不可伪造的脚本来源标识,并允许站点声明“加载关系不等于信任关系”的拓扑策略。工具注册、覆盖、撤销与导航清理都应校验能力凭据;信任标签需随工具生成内容进入 Agent 历史,并在来源失效时级联撤销。

所有 Agent 可见元数据应在调用前完成检查。测试至少覆盖抢占、覆盖、撤销、SPA 逻辑导航、声明—副作用不一致、描述/Schema/返回注入、任务相关恶意工具名和白盒自适应改写,并以无攻击基线衡量效用。

局限与待验证问题 ​

证据等级为 moderate。参考实现是 JavaScript Polyfill,API 不可篡改和原生脚本来源属于架构假设,不是浏览器内核已实现的保证。能力句柄泄露或注册者充当混淆代理(Confused Deputy)时,所有权保证也会失效。

站点声明的信任策略与可信用户确认界面没有实证评估;异步执行观测可能发生归因碰撞。结果基于一个参考实现、固定注入集和两类模型,不能外推到未来 WebMCP 标准或所有浏览器。

参考链接 ​