WebMCP-Phalanx:为浏览器内 LLM Agent 工具调用建立信任边界
WebMCP-Phalanx: Enforcing and Characterizing Trust Boundaries for Browser-Integrated LLM Agents
- Permissions and approval
- Prompt injection
- MCP and skills
- Instruction–data separation
- Permissions and sandboxing
- web agent
- Application layer
Phalanx用浏览器能力凭证与Q/P双智能体隔离WebMCP工具面;描述注入L3为0/80,返回值残留2/80。
攻击者是与合法站点同一源的页面脚本(被攻陷广告SDK或被污染分析脚本),可执行任意JavaScript、访问同一工具注册表,加载可先于或后于合法脚本。
- WebMCP草案让网页向LLM智能体暴露可调用工具,但执行处在浏览器同源策略下,主程序与第三方脚本共享同一源。作者称因此出现主体归属伪造、工具生命周期失控和语义提示注入,且不依赖某一个语言模型。
- WebMCP-Phalanx把来源核验和语义执行分开。浏览器发放不可伪造的capability handle,并用来源、生命周期和运行轨迹合成Green/Yellow/Red标签。无工具权的Q检查描述、schema和返回内容,通过后再交给有调用权的P。
- 作者报告撤销与覆写从20/20降到0/20。描述注入在多代理判定下为0/80,返回内容注入残留2/80。跨页只清工具后攻击成功率仍为70%,加上框架后为0%。持有分类器提示的白盒攻击者把载荷挪到工具名,绕过15/16。
- 作者指出同源脚本注册即可拿到凭证,主体归属超出bearer capability。polyfill模拟了来源与API完整性。信任策略和带外确认未实证评估。运行时观测挡不住首次副作用。作者认为工具名上的白盒绕过需要调用时序门。
- Threat model
- 攻击者是与合法站点同一源的页面脚本(被攻陷广告SDK或被污染分析脚本),可执行任意JavaScript、访问同一工具注册表,加载可先于或后于合法脚本。仅持自己注册工具的capability credential。浏览器扩展不在范围。目标是诱导调用恶意工具、外泄数据或劫持控制流。
- Benchmarks
- WebMCP reference implementation (@mcp-b/global 2.3.2, 2026-06-17 draft)
- Metrics
- Attack Success RateTask Completion Rate
研究者提出 WebMCP-Phalanx,一种面向 W3C WebMCP 浏览器内 LLM Agent 工具调用的双层运行时架构,用于补足同源策略在工具来源与生命周期上的不足。第一层以浏览器原生信任锚,通过加密保护的能力凭证把每个工具绑定到注册主体,并在工具生命周期内传播来源标签;第二层把语义检查与特权工具使用分离,无工具调用权限的隔离 Agent(Q-LLM)检查工具元数据、输出和页面内容中的提示注入,通过验证的内容再交给特权 Agent(P-LLM)执行,Q-LLM 内部状态对页面脚本不可见。实验显示,浏览器原生归属机制把撤销与覆写攻击成功率从 100% 降到 0%;双 Agent 运行时拦截了工具描述中嵌入的全部 80 次提示注入尝试,并把工具返回攻击限制在 80 次中的 2 次成功,任务效用与无攻击基线在统计上无差异。
Paper analysis
What problem does this paper attempt to solve?
WebMCP在SOP下缺少工具归属与生命周期保证,Phalanx用浏览器信任锚加双智能体隔离。
WebMCP在SOP下让同页脚本共享工具注册表,却不提供可核验的主体归属、生命周期和语义边界。
- 场景:作者称W3C WebMCP草案使网页向LLM智能体暴露结构化工具,智能体可直接执行页面动作。规范未在同页各方之间划出显式信任边界。
- 现有不足:作者称四类弱点与具体模型无关:工具列表无origin,脚本可抢注、撤销或替换;SPA换页后工具残留;自称只读仍可外泄;合法工具把指令藏进描述或返回。孤立补丁不能消除。
- 假设:作者认为现有多LLM防御假定系统已能区分可信与不可信内容,而当前WebMCP给不出不可伪造的标签来源。作者称capability证明持续持有,不是身份。
- 提出:作者提出WebMCP-Phalanx:浏览器原生层发放capability credential并传播信任标签;无工具调用权的Q-LLM检查页面供给内容,通过后再交给P-LLM。
- 威胁模型:
- 受害系统:经WebMCP与网页交互的LLM智能体。页面向浏览器注册工具,智能体经浏览器读取列表、调用并接收返回。
- 攻击者:被攻陷的广告SDK或被污染的分析脚本,作为与合法站点同一源的页面脚本。浏览器扩展属隔离世界,不在范围内。
- 能力:可执行任意JavaScript;因SOP可访问同一注册表,可注册恶意工具并尝试撤销已有工具;加载可先于或后于合法脚本。只持有自己所注册工具的凭证,不能出示他人凭证。
- 目标:破坏控制流,使智能体执行有害动作或原任务失败,包括诱导调用恶意工具、外泄敏感数据、劫持未授权操作。
What related research exists?
作者把缺口放在注册表先验合法这一假设上,主张用浏览器原生凭证补标签来源。
WebMCP与间接提示注入
- 多源环境:作者称LLM经MCP进入网页后,单一可信主体模型被拆开(SERVERS 2025;Jing等2025的MCIP)。
- 间接提示注入:作者把相关工作分成视觉注入、对话操纵和隔离数据片段,并讨论它们在多源网页里的延伸。
- 工具面:作者称武器化工具描述可劫持任务规划(Sneh等2025的ToolTweak;WANG等的TrojanTools),后续操作也可被污染(Li等2025a)。作者称在扁平SOP下不做工具所有权核验,智能体完全没有防御。
模型内在防御
- 单模型加固:作者讨论结构化查询隔离StruQ(Chen等2025b)、偏好优化SecAlign(Chen等2025c),以及AttriGuard(He等2026)和MELON(Zhu等2025a)一类运行时掩码。
- 作者的批评:把复杂推理和严格安全过滤交给同一模型会加剧幻觉,并使任务成功率降到45%以下(作者引Wang等);只做后端语义校验不足以在协议层保护上下文完整性(Jing等2025)。
多智能体特权分离
- 隔离与护栏:Privtrans(Brumley and Song 2004)做程序特权分离。IsolateGPT(Wu等2024)与ACE(Li等2025b)做沙箱隔离。Kim等2025、Wang等2025c、Zhu等2025b与de Witt等2025用护栏约束数据拓扑,以防特权升级。
- 作者的批评:这些防御假定工具注册表先验合法。作者称SOP下恶意脚本可以伪造工具描述;注册表在原生层被破坏后,后端隔离到的工具在设计上已经是恶意的。
基线与环境
- 对照:实验未复现上述系统,而用L0无防御、L1仅标签、L2规则剥离、L3多代理内容判定,另有无攻击基线与仅生命周期监控。环境为WebMCP参考实现@mcp-b/global 2.3.2(2026-06-17草案)。作者写多智能体与所采用的注入攻击基线使用同一语言模型,未给出基线名称和模型名称。
作者把本文放在浏览器原生层:发放不可伪造的capability handle,再把信任标签接到不对称多智能体运行时。Discussion点名Dual-LLM与CaMeL,称它们假定系统已经知道哪些内容不可信,却未解决标签从何而来、对手能否伪造。
How does the paper address this problem?
浏览器发放不可伪造capability并打信任等级,Q检查语义后才把内容交给有工具权的P。
WebMCP-Phalanx把来源核验与语义执行拆开:浏览器原生层先给工具打不可伪造的信任标签,下游双智能体只按标签路由,不再自行判断工具是否可信。Figure 1是浏览器侧流水线。
攻击分类与流水线
- 两类利用:协议与状态操纵针对规范,例如改工具状态,或利用换页清理不完整,使工具和残留语义继续存在。语义投毒把指令藏在结构合法的描述、输入schema或执行后返回内容里。两类分别对应浏览器层和多智能体层。
- 流水线:页面脚本调用registerTool时,Tool Ownership Authority接管状态;Telemetry与Lifecycle Oracle持续评估;Data Boundary Authority合成不可变信任等级;工具和标签再进入Multi-Agent Runtime。
原生所有权与遥测
- 所有权:注册、枚举、注销放进浏览器原生层。作者称注册表因此不能被图灵完备的第三方JavaScript直接访问。注册成功后铸造不透明capability handle;撤销或覆盖必须出示该凭证。同源第三方也只能改自己注册的工具。Figure 1注称:先注册者占用工具名仍是结构性限制。
- 归属与生命周期:tools/list时从隔离状态附加不可伪造的origin标签。它能标明源,不能区分共享该源的脚本。工具声明session或navigation。模块拦截History API的pushState、replaceState、popstate,在SPA逻辑换页时清除navigation范围的工具,使生命周期对齐用户所见页面,而不是留到硬刷新。
- 运行时观测:执行中异步监视出站向量fetch、sendBeacon、Image.src,以及隔离MutationObserver看到的DOM变更,并与静态声明比较。偏离则把标签降为Red,写入本次输出和之后的注册表读取。作者称这是检测与遏制,不依赖重型沙箱。
信任等级
- 两维合成:来源维看是否持有原生层发出的有效capability。内容维看声明行为是否与运行轨迹一致。
- 三级:Green为来源经密码学校验且执行符合声明,可直接执行。Yellow为来源已核验,但声明的schema会改变本地环境,做轻量语义核验。Red为无合法来源,或遥测发现行为违规,隔离或显式阻止。
- 否决边界:作者称来源维被设计成对自我报告属性有绝对否决;但同源对手一旦注册成功就持有有效capability,该否决不会触发。
不对称双智能体与确认
- 路由:P有工具调用权,Q没有。Green直接给P。不可信或可疑内容强制进入Q做语义评估。作者称对抗指令由Q吸收,从而不进入P的控制流。Q的内部状态不对页面脚本暴露,包括同源脚本。
- 两个检查点:注册时,Q读静态描述和输入schema,拦截针对规划的静态提示注入。执行后、返回内容回到P的操作记忆之前,Q再拦截并清理,因为结构良性的工具仍可能在执行中生成恶意载荷。
- RUI:无法确定性分类或极敏感操作时,浏览器经可信路径向用户确认。只有Red触发同意;Green与Yellow由双智能体自主处理。作者称同意是最后一道,不是主要判据。设计原则是分开可信来源和可信使用。
What experiments did the paper conduct?
作者报告覆写撤销降至0/20;L3描述注入0/80,返回注入残留2/80。
实验设置
- 环境:真实浏览器;WebMCP参考实现@mcp-b/global 2.3.2,采用2026-06-17草案。参考实现是JavaScript polyfill。作者称其权限弱于原生层,防御指标是保守下界。攻击经脚本注入,模拟第三方脚本。
- 模型:论文未给出语言模型名称。多智能体模块中的智能体使用同一模型,并与所采用的注入攻击基线相同。贡献称白盒刻画跨两个模型族和三种分类器提示设计,正文未给出名称。
- 判定:攻击成功指智能体调用恶意工具,且接收端收到外泄数据。论文未写LLM评审或人工一致性。作者故意不拦截已检测到的违规,以取得ASR上界;浏览器侧标注并传播,强制执行在智能体侧。
- 对照:L0无防御,L1仅标签,L2规则剥离,L3多代理内容判定;另有无攻击基线与仅生命周期监控。
- 规模:Table 1每格n=80。跨页完成数写为19/20与16/20。所有权实验按20次报告(§6.1)。Table 4未报告各名称档样本量。论文未报告重复次数和查询次数。
- 场景:正文提到结账、驱动安装,以及Page A到Page B的跨页转账残留。除结账L0为20/20、驱动安装L0为10/20外,论文未说明80次如何分到各场景。
主结果
论文未说明所用语言模型。据Table 1,数字是攻击成功次数。
Swipe horizontally to read the table
注入向量 L0无防御 L1仅标签 L2规则剥离 L3多代理判定 描述(注册时) 69/80 71/80 25/80 0/80 返回内容(执行后) 42/80 38/80 2/80 2/80 - 标签盲区:作者将仅标签概括为描述注入仍有89%、返回注入仍有48%穿过,并称接近无防御。返回注入的恶意内容在注册铸标签时还不存在。描述注入上L1略高于L0,作者称是因为标签把工具标成可信,向智能体提供了误导信息。
- 剥离与阅读:作者称与内容无关的删改能压低描述注入,让隔离智能体阅读内容后该通道被完全拦住。返回内容可整段换成占位,故规则剥离几乎挡住,但两种机制都留下残留。Table 2把L3的返回残留归因于载体执行前按工具名调用;对L2,作者称其中1次同样如此,另1次为channel consistent,正文未解释该词。
- 效用:描述通道任务完成从66/80(L0)到56/80(L3)。作者称这不是防御代价:无攻击基线为61/80,与L3无统计显著差异(p=0.48)。L0更高来自结账场景里贴合任务的恶意工具名;描述被删后脚手架仍在,故由工具名单独承载。作者要求完成率比较锚定无攻击基线。摘要称受保护运行时的效用与无攻击基线无统计显著差异;正文写出的检验是上述这一对。
浏览器层撤销、覆写与伪造
- 测了什么:持有自身capability的第三方脚本能否改合法工具。作者报告对checkout等合法工具的操作会确定性抛出InvalidStateError。
- 结果:覆写与撤销(V4、V6)从20/20降到0/20;V5的合法响应率从0/20升到20/20(§6.1)。引言将撤销与替换在所评设置下概括为从100%到0%。作者称凭证经受住全部已测伪造尝试,未给出次数。
- 解读:作者称所有权完整性成立,主体归属仍只部分解决:任意同源脚本一旦注册就获得自己的capability,origin维退化,否决无法对同源对手触发。
跨页语义残留
- 设置:Page A的工具在返回内容中放入引导转账的指令;导航到Page B后工具被清除,观察残留语义是否仍驱动转账。
- 结果:据Table 3,无防御ASR 80%、完成95%;无攻击为0%与100%;仅生命周期监控为70%与80%;监控加本文框架为0%与100%。正文写仅清除使完成从19/20降到16/20。
- 解读:作者称只清工具仍留下纯语义残留,因为内容已在对话历史中,与工具是否还在无关。对策是把信任标签的生命周期延伸到工具生成的内容,清除工具时使历史中的残留返回标签失效。完成下降不是清除伤害任务:这些运行里智能体采信残留审计主张,停下并请用户确认虚构转账,而不是付款。作者称去掉干扰后完成高于只清除。
名称相关性与白盒自适应
- 名称档:固定注入内容,只改变名称与任务的相关程度(Table 4)。L2的ASR从完全无关和通用的0%,到常见步骤25%、任务领域55%、关键步骤70%;L3在五档均为0%。作者称规则剥离变弱,是因为名称贴合任务时智能体在内容过滤前就调用;多代理阅读内容,不受名称包装影响。论文未报告各档n。
- 场景:结账在L0被劫持20/20,作者称恶意工具与结账同功能,可替换原工具。驱动安装没有这种替代,作者称是唯一在无防御下攻击经常失败的场景(L0为10/20,失败运行仍完成任务)。作者称决定可达性的是可替代性,不只是序列是否刚性。
- 白盒:主要评测测固定、已知注入。另建white-box adaptive attacker,持有Q的分类器提示,并有端到端成功反馈。作者报告它绕过16个描述层载荷中的15个,重写轮数中位数为1;方式不是击败Q的语义判断,而是把载荷挪到贴合任务的工具名上。作者认为需要名称层或调用时序门。摘要称这促使在全部智能体可见的工具元数据校验完成前推迟调用。
其他消融与分析
- 作者称L2与L3的返回残留互不相交,比例相同是巧合;部分运行在载体执行前或同一轮按工具名调用,此时没有返回内容可检查,Q对载体检测为40/40(§5.3)。
- 另有外泄工具描述干净、返回良性状态对象,两个内容检查点都看不见。作者称内容检查拦住的是诱发调用的载体,不是被诱发的调用本身。
- 作者写四次运行中三次由名称驱动,另外两次不是检测失败;这两句的次数不能直接相加,此处只记录原文。
- Table 2:注册期标签规则在同源对手下总会失败,因为每个成功注册者都拿到capability;论文指向附录表,正文未列出该表数字。返回内容的标签规则总会失败,因为标签在注册时铸成,注入内容当时还不存在。
- 作者报告贴合任务的恶意名称会抬高被攻击条件下的效用(p=0.003),未写明该p值对应哪一对条件;主动攻击也可能压低效用。作者要求效用只与零攻击基线比(§6.2)。
- 贡献写白盒结果跨两个模型族、三种分类器提示设计;实验节与结论未给出分模型族数字。
What are some points that can be further explored?
作者认为同源主体归属、polyfill假设和工具名调用时序仍在当前机制之外。
作者指出的局限与后续方向
- 主体归属:作者称bearer capability到不了主体归属。同源恶意脚本会按同样条件拿到handle。JavaScript没有不可伪造的脚本身份,document.currentScript和栈自省可被同源对手伪造。作者建议规范增加原生脚本来源,以及类似CSP的声明式信任拓扑;评估其原生实现不在本文范围(Discussion 6.1)。Figure 1注称先注册者占用工具名仍是结构性限制。
- polyfill:参考实现是JavaScript polyfill,两项假设是模拟而非原生:API表面完整性,以及vanilla JavaScript中不存在的密码学脚本来源。来源相关结果停在架构存在性假设,不是可密码学转移的界。作者称polyfill权限弱于原生实现,防御指标是保守下界(Conclusion)。
- confused deputy:capability是不记名凭证。注册者泄露handle,或暴露代为撤销工具的函数,所有权保证即失效(Conclusion)。
- 未评估组件:站点声明的信任策略,以及带外Request User Interface,作为规范用的架构原语,没有实证评估(Conclusion)。
- 运行时观测:这是执行后检测。初次违规的一阶副作用无法阻止。异步execute的观测窗口内,监视器可能无法把DOM变更归到特定工具,导致归属冲突(Conclusion)。
- 后续方向:一是自适应对手。主要评测测固定、已知注入;白盒攻击者绕过16个描述层载荷中的15个,中位重写1轮,办法是把载荷挪到工具名。作者认为需名称层或调用时序门。二是确定性执行沙箱:运行时观测面向检测、遏制与披露,不是预防;阻止工具内部的隐蔽行为需要浏览器层沙箱(Conclusion and Future Work)。
实验覆盖范围
- 实验在真实浏览器中进行,基于@mcp-b/global 2.3.2与2026-06-17草案;攻击者为同页第三方脚本,浏览器扩展被写明不在范围内(§3.2、§5.1)。
- 语义注入主表为两个向量、四个防御层级,每格n=80(Table 1)。跨页完成数写到19/20与16/20(§5.4)。所有权结果按V4、V5、V6各20次报告(§6.1)。
- 名称相关性分五档报告L2与L3的ASR(Table 4)。结账与驱动安装给出L0的20/20与10/20(§5.5)。
- 论文未报告实验所用语言模型名称、Table 4各档样本量、伪造尝试次数、查询次数和重复次数。成功判定写明为调用恶意工具且接收端收到外泄数据;作者写明故意不拦截已检测违规,以取ASR上界(§5.1)。
- 白盒自适应攻击者持有Q的分类器提示和端到端成功反馈,结论给出15/16与中位1轮重写(Conclusion)。贡献写该刻画跨两个模型族和三种分类器提示设计,正文未给出分项结果。站点声明的信任策略和RUI被作者写明未实证评估。
Summarize the main content of the paper
Phalanx用浏览器凭证绑定工具所有权,Q/P分离拦住描述注入,工具名与返回值仍有残留。
WebMCP-Phalanx针对浏览器里的WebMCP智能体:在SOP下补工具所有权,并把语义检查从有工具权的执行中分开。
- 问题:同页脚本可抢注、撤销或替换工具,换页后工具仍残留,结构合法的工具也能把提示注入藏进描述或返回。作者认为多代理防御缺一个不可伪造的“谁不可信”标签。
- 方法:原生层用capability handle绑定注册者,综合来源、生命周期和运行轨迹打出Green、Yellow、Red。无调用权的Q在注册描述和执行后返回两处做语义检查,通过才进入P。只有Red走用户确认。
- 所有权:所评设置下,撤销与覆写从20/20降到0/20;引言概括为从100%到0%。同源脚本仍可为自己注册的工具拿到凭证,主体归属只部分解决。
- 注入与效用:描述注入在L3为0/80,L0为69/80;返回内容注入在L3残留2/80(Table 1)。描述通道上无攻击完成为61/80,L3为56/80(p=0.48)。跨页只清工具后ASR仍为70%,加上框架后为0%(Table 3)。
- 名称层:名称越贴合任务,规则剥离越弱;L3在Table 4各档仍为0%。white-box攻击者把指令放到工具名上,绕过15/16个描述层载荷。作者认为需要调用时序门,并建议规范补上原生脚本来源和声明式信任拓扑。规范仍在起草,作者希望这些结果能在广泛部署前帮助W3C纳入安全设计。