智能体的原子性:暴露、利用和缓解浏览器使用智能体中的 TOCTOU 漏洞

在这里插入图片描述
原文链接:Atomicity for Agents: Exposing, Exploiting, and Mitigating TOCTOU Vulnerabilities in Browser-Use Agents

摘要

浏览器使用智能体被广泛用于日常任务。它们通过基于结构化 DOM 的接口或基于页面截图的视觉语言模型,实现与网页的自动化交互。然而,网页在规划和执行之间经常发生变化,导致智能体基于过时的假设执行动作。我们将这种时间上的错位视为浏览器使用智能体中的一种检查时间到使用时间(TOCTOU)漏洞。动态或对抗性的网页内容可以利用这个窗口诱导非预期的动作。我们使用一个跨越合成和真实世界网站的基准,对浏览器使用智能体中的 TOCTOU 漏洞进行了大规模实证研究。利用该基准,我们评估了 10 个流行的开源智能体,并表明 TOCTOU 漏洞广泛存在。我们设计了一种基于执行前验证的轻量级缓解措施。它监控规划和执行期间的 DOM 和布局变化,并在动作执行前立即验证页面状态。这种方法降低了不安全执行的风险,并减轻了浏览器使用智能体中的非预期副作用。

1 引言

浏览器使用智能体越来越多地用于自动化日常网页任务,如搜索、表单填写、在线购物和账户管理 [24, 26, 37]。越来越多的开源系统,包括 Browser-Use [23]、Midscene [35] 和 UI-TARS [30],为网页自动化提供了实用框架。与此同时,各大公司已经开始推出带有内置网页智能体的产品,例如带有浏览和完成任务代理模式的 ChatGPT Atlas [27]。这些智能体通常通过观察当前网页、基于此观察规划下一个动作,然后在页面上执行动作来运作 [32, 38]。

尽管它们被迅速采用,但浏览器使用智能体在日常使用中仍然面临显著的安全挑战,特别是在动态网站上。在各种智能体设计中,存在一个共同且脆弱的假设:智能体在规划期间检查的页面状态在计划动作被派发时仍然有效。许多现代网站由于广告或延迟组件,在初始页面加载后不久就会更新其布局或内容 [18, 22]。图 1 展示了 Forbes 首页的一个代表性例子。在时间 t 1 t_1 t1,页面完成其初始渲染并展示一个正常的阅读界面;绿色区域标记了用户打算点击的区域(例如,继续阅读)。不久之后,在时间 t 2 t_2 t2,网站异步加载了一个广告覆盖层,这在现代网站上很常见。红色区域表示覆盖层区域,它与原始目标区域部分重叠。当智能体最终在时间 t 3 t_3 t3 点击时,点击可能会落在覆盖的广告上而不是原始目标上,从而触发对广告的非预期点击,并将智能体重定向到广告页面。对于人类用户来说,这样的变化很容易注意和避免。然而,对于浏览器使用智能体来说,规划和执行之间的时间间隙可能会悄悄地使规划时的假设失效,允许一个不合作或动态变化的页面在不需要入侵智能体或浏览器的情况下劫持智能体的预期动作。

在这里插入图片描述

图 1:Forbes 首页上的一个真实世界 TOCTOU 示例。绿色区域表示 $t_1$ 时的预期目标区域。一个延迟的广告覆盖层(红色区域)在 $t_2$ 出现并与目标重叠,因此随后在 $t_3$ 的点击可能变成非预期的广告点击,重定向到广告页面。

更一般地说,这种行为源于浏览器使用智能体中观察和动作之间的延迟。在观察页面后,智能体通常依赖大语言模型(LLM)来推理下一个动作。这种推理在执行之前引入了不可忽略的延迟。我们将由此产生的时间错位称为浏览器使用智能体中的检查时间到使用时间(TOCTOU)漏洞。在这个窗口期间,页面状态可以在智能体在规划期间检查之后、动作执行之前发生变化 [6, 31]。

在这项工作中,我们系统地研究了浏览器使用智能体中的 TOCTOU 漏洞。我们的目标是理解规划和执行之间的时间错位是否以及如何被利用,以导致非预期和不安全的执行行为。为了支持这项研究,我们构建了 DYNWEB,一个能够对 TOCTOU 漏洞进行受控和可重复评估的基准。

2 背景

2.1 浏览器使用和网页智能体

最近的工作探索了基于 LLM 的智能体与网页环境交互,作为复杂决策和工具使用的测试平台。诸如 Mind2Web [10] 和 WebArena [40] 等基准,以及更新的评估套件 [11, 16, 17, 19],评估了智能体在不同网站、页面结构和任务规范下的行为。

与此同时,越来越多的系统为浏览器自动化提供了实用框架,包括 Browser-Use [23]、Midscene [35]、UI-TARS [30] 和 Agent-S [2, 3]。这些系统的主要区别在于智能体如何感知网页以及如何与网页交互,这可以从两个维度来描述:观察空间动作空间

观察空间。 浏览器使用智能体依赖多样的观察来感知和解释网页,通常分为三类:

  • 结构化文本:机器可读的表示,如 DOM、可访问性树或提取的文本摘要。这些暴露了可用于定位动作的标识符和属性,如角色、标签和状态 [1, 13, 23]。
  • 截图:渲染页面的像素级截图。它们保留了视觉布局,但需要视觉语言模型来定位目标和解释空间结构 [2-4, 7, 28, 30, 33]。
  • 混合:组合,例如 DOM 视图与同步截图配对。这些利用了结构的稳定性和像素的保真度 [13, 23]。

动作空间。 浏览器使用智能体通过浏览器或自动化框架提供的接口执行动作:

  • 元素级操作:通过语义句柄(如选择器、DOM 路径或可访问性 ID)定位 UI 组件的动作,通常通过浏览器自动化工具实现 [1, 13, 23, 35]。
  • 类人交互:鼠标移动、点击、拖拽和键盘输入,由屏幕坐标和按键序列参数化,模拟最终用户行为 [2, 3, 36]。
  • 程序化执行:发出脚本或 API 调用,如页内 JavaScript 或自动化 API,以完成多步骤任务 [5]。

交互循环。 浏览器使用智能体通过一个重复的循环与网页交互,该循环在观察和行动之间交替。在每次迭代中,智能体首先观察当前页面,包括可见内容和相关界面状态。利用这个观察和任务目标,它决定下一步做什么,例如在页面上选择一个目标并选择要执行的交互。然后,所选动作被应用于实时页面,这可能触发导航、更新内容、打开对话框或提交数据。然后,智能体观察结果页面状态并继续下一次迭代。当任务完成、智能体无法取得进展或决定停止时,循环终止。

2.2 操作系统中的 TOCTOU

TOCTOU 竞争。 检查时间到使用时间(TOCTOU)指的是一类竞争条件,其中程序基于其早期检查的属性做出安全敏感的决策,但后来执行操作时假设该属性仍然成立 [6, 31]。在 UNIX 风格的文件系统中,当特权程序检查一个路径名,然后稍后使用相同的路径名进行文件操作时,通常会出现这种情况。例如,一个程序可能使用 access(2)stat(2) 验证文件是否可访问或具有预期的所有权和权限,然后使用 open(2) 打开文件。漏洞在于路径名不是对特定文件对象的稳定引用。在检查和用途之间,能够修改文件系统命名空间的攻击者可以更改路径名解析到的目标。常见的操作包括用符号链接替换目标、重命名路径中的目录或插入硬链接,这可以将后续的特权操作重定向到非预期的文件。这种模式是经典的符号链接竞争的基础,这些竞争会重定向临时文件、access/open 不匹配以及使用可预测名称创建不安全的临时文件。

缓解模式。 操作系统接口和标准库提供了几种减少文件操作中 TOCTOU 竞争的模式。一个反复出现的策略是避免基于可变名称做出安全决策,然后在稍后重用这些名称 [8]。相反,程序尽早绑定到底层对象的稳定引用,并通过该绑定执行后续操作,这可以防止后续的命名空间更改重定向操作。

另一个常见策略是缩小或消除检查和用途之间的时间间隔 [34]。系统调用和库辅助函数通常将验证和使用合并为单个操作,因此攻击者没有机会在两个步骤之间插入更改。路径解析也受到约束,以减少攻击者对名称解释方式的影响,例如限制方向并相对于受信任的锚点(而非环境进程状态)进行解析。当涉及更新时,系统倾向于使用提交风格的协议,避免暴露中间状态并确保替换原子地发生。

这些模式反映了相同的原则:避免对可变引用进行“检查后使用”,并将任何剩余的验证尽可能靠近依赖它的操作。

3 暴露 TOCTOU 漏洞

3.1 漏洞定义

智能体循环与符号。 在每个步骤 t t t,网页环境有一个底层状态 s t ∈ S s_t \in \mathcal{S} stS。智能体接收从该状态生成的观察 o t ∈ O o_t \in \mathcal{O} otO,记为 o t = O ( s t ) o_t = \mathcal{O}(s_t) ot=O(st)。给定 o t o_t ot 和任务目标 g ∈ G g \in \mathcal{G} gG,智能体选择一个动作 a t ∈ A a_t \in \mathcal{A} atA。应用 a t a_t at 会更新环境并产生下一个状态和观察。智能体重复此过程直到任务终止。

TOCTOU 窗口。 TOCTOU 的产生是因为智能体基于在检查时间捕获的观察选择动作,但该动作在稍后的使用时间被应用于实时页面。令 t c t_c tc 表示智能体捕获用于选择动作的观察的时间。令 t u t_u tu 表示所选动作被应用于页面的时间。定义
s c ≜ s t c , s u ≜ s t u , o c ≜ O ( s c ) . s_c \triangleq s_{t_c},\qquad s_u \triangleq s_{t_u},\qquad o_c \triangleq O(s_c). scstc,sustu,ocO(sc).
区间 [ t c , t u ) [t_c, t_u) [tc,tu) 是 TOCTOU 窗口。

漏洞条件。 当页面状态在 TOCTOU 窗口期间发生变化,并且所选动作仍然针对从检查时间状态推断出的页面特征时,就会发生 TOCTOU 漏洞。令 B i n d ( a , s ) \mathrm{Bind}(a,s) Bind(a,s) 表示动作 a a a 在状态 s s s 中的目标绑定,即 a a a s s s 中解释时所引用的具体元素或值。当以下条件成立时发生漏洞:
s c ≠ s u ∧ B i n d ( a , s c ) ≠ B i n d ( a , s u ) , s_c \neq s_u \wedge \mathrm{Bind}(a,s_c) \neq \mathrm{Bind}(a,s_u), sc=suBind(a,sc)=Bind(a,su),
因此,发出的相同动作 a a a 在使用时间被应用于与智能体在检查时间意图不同的目标。这种目标偏移可以重定向点击、提交错误的输入或应用过时的值,导致非预期且可能不安全的后果。

在这里插入图片描述

图 2:浏览器使用智能体循环中的 TOCTOU 窗口。智能体从 o p l a n o_{plan} oplan 中选择 a p l a n a_{plan} aplan,但页面在 t a c t t_{act} tact 之前发生变化,因此 a p l a n a_{plan} aplan 可能被应用于不同的目标。

图 2 可视化了 TOCTOU 窗口如何在浏览器使用智能体中出现。在时间 t p l a n t_{\mathrm{plan}} tplan,智能体拍摄页面快照,用它来决定下一步做什么,并产生一个计划动作 a p l a n a_{\mathrm{plan}} aplan,该动作隐式地绑定到该时刻页面的特征。当智能体仍在规划时,页面继续演变。延迟组件可能加载,脚本可能更新 DOM,后台刷新可能改变内容或布局,因此环境可能从 s p l a n s_{\mathrm{plan}} splan 漂移到不同的执行时状态 s a c t s_{\mathrm{act}} sact。当智能体最终在时间 t a c t t_{\mathrm{act}} tact 发出 a p l a n a_{\mathrm{plan}} aplan 时,该动作被应用于当前页面状态,而不是先前告知计划的状态。如果动作的预期绑定不再有效,发出的相同动作可能被重定向到不同的元素,或者对与预期不同的值进行操作。

3.2 根本原因分析

浏览器使用智能体中的 TOCTOU 窗口是观察和动作选择之间延迟的直接后果。在捕获观察后,智能体必须运行 LLM 推理来解释页面并决定下一个动作。这种计算不是瞬时的。它通常包括多步提示、对长上下文进行推理以及工具中介的子程序,因此延迟可能跨越数秒甚至更长。因为页面在此间隔期间是实时的,智能体在检查时间依赖的任何状态都可能在动作应用之前变得过时。当智能体最终执行所选动作时,它被应用于当前页面状态,而不是先前告知决策的状态。如果动作仍然绑定到规划时的假设,检查和用途就可能变得不一致。

根本原因在于缺乏用于网页交互的原子性检查和用途原语。网页根据其自身逻辑演变,由脚本、定时器、渲染和独立于智能体的网络响应驱动。从浏览器的角度来看,智能体只是输入事件的另一个来源。没有标准机制允许外部客户端在决定下一步做什么时暂停或冻结页面演变。这样的机制对人类用户来说是不必要的,并且会与现代网站所依赖的响应性和异步性相冲突。因此,智能体无法将其检查和用途耦合为单个原子步骤。任何从早期观察中选择的动作都被应用于可能已经改变的页面,这使得 TOCTOU 成为浏览器自动化中的一个固有风险。

这种 TOCTOU 窗口将普通的页面动态变成了浏览器使用智能体的执行时攻击面。下一节 §4 定义了威胁模型和本文考虑的页面突变类别。§5 提出了执行前验证作为一种缓解措施,通过在执行前立即检查相关变化来减少暴露。§6 评估了这种方法在智能体和场景中的有效性。

4 利用 TOCTOU 漏洞

本节表明,浏览器使用智能体中的 TOCTOU 窗口不仅仅是错误行为的来源,而是执行时利用的实际途径。首先,§4.1 以智能体为中心的形式化威胁模型。接下来,§4.2 描述了攻击者控制的源可以通过检查时间和使用时间之间微小且合理的页面动态实现的三个典型攻击向量:UI 变化、数据变化和过期状态交互。最后,§4.3 介绍了 DYNwEB,一个系统化的基准,实例化了具有确定性更新计划和任务特定评判标准的案例。

4.1 威胁模型

攻击目标。 攻击者旨在利用 TOCTOU 窗口诱导非预期的智能体动作。目标包括拒绝任务完成、将智能体重定向到攻击者选择的目的地,以及引导智能体执行有利于攻击者且看起来与用户请求任务一致的动作。

攻击者能力和成功标准。 攻击者控制智能体访问的某个网页源,例如点击的搜索结果、广告或用户生成的链接,或者用户明确要求智能体打开的网站。在该源内,攻击者可以控制页面内容和行为,包括 DOM、CSS、脚本、定时器和服务器响应。攻击者不会入侵智能体、模型、提示、工具链或本地运行时。关键的是,对于人类用户来说,页面必须保持功能正常并与典型的现代网络行为一致。

在这些约束内,攻击者通过在检查时间和使用时间之间调度微小且合理的页面更新来利用 TOCTOU 窗口。目标是确保在检查时间状态下正确的动作在使用时间状态下具有不同的语义。如果攻击成功,智能体在使用时间执行了攻击者意图的语义,例如,与检查时间所隐含的元素不同的元素进行交互。

范围外。 这项工作不假设浏览器、操作系统或智能体实现存在超出 TOCTOU 错位之外的漏洞。它不依赖于模型入侵或对智能体系统的提示注入。重点是攻击者控制的内容和现实页面动态下的智能体执行时行为。其他攻击向量不在范围内。

4.2 攻击向量

当页面状态可以在检查时间和使用时间之间发生变化时,浏览器使用智能体中的 TOCTOU 漏洞变得可利用。在 §4.1 的威胁模型下,攻击者可以在该窗口期间触发微小且合理的页面动态,同时保持页面对于人类用户的功能性。这些动态作为 TOCTOU 漏洞的利用向量。我们将它们分为三类。

类型 I(UI 变化):攻击者诱导更新,改变哪些元素存在或它们在页面上的位置。示例包括弹窗对话框、Cookie 横幅、订阅提示、轮播图以及延迟加载内容导致的布局偏移。此类更新可以添加新的交互元素、重新排序现有元素或覆盖部分界面。因此,在检查时间布局下正确的交互在使用时间可能会解析到不同的目标。这对于基于坐标的动作最为明显,但当标识符、可见性或命中测试条件发生变化时,它也会影响基于元素的动作。例如,智能体可能旨在点击一个良性按钮,但在 TOCTOU 窗口期间引入的覆盖层导致相同的点击激活了不同的控件。

影响:UI 变化可以直接导致非预期的点击、非预期的导航或非预期的表单提交。它们还可以作为垫脚石,将智能体重定向到攻击者选择的视图或工作流中,增加攻击者对后续交互的影响,并放大应用程序中可能存在的其他独立弱点的 impact。

类型 II(数据变化):攻击者依赖值更新,这些更新改变了智能体读取和推理的内容,而不显著改变页面的可见结构。价格、可用性指标、计数器和账户余额可能通过网络请求或定时更新刷新。UI 元素可能保持在原位,但其内容不再匹配检查时的假设。因此,在早期值下正确的动作(例如,在低于阈值的情况下进行购买)在执行时可能违反用户意图。例如,智能体可能决定基于显示的价格确认购买,但在 TOCTOU 窗口期间的刷新改变了价格,而确认控件保持不变。

影响:数据变化可以绕过智能体在检查时强制执行的用户施加的约束,如预算上限、可用性要求或最低余额条件。攻击者可以诱导智能体执行违反这些约束的动作,导致非预期的购买、不利的交易或直接的经济损失。

类型 III(过期状态):攻击者利用时间相关的有效性,其中动作仅在短窗口内有意义,例如在倒计时结束前提交一次性代码或完成验证码。与 UI 偏移或数据刷新不同,过期状态改变了下一步的有效性,即使页面看起来仍然相似。

影响:过期状态可以产生持久的故障模式,而不是单一的失误。特别是,如果智能体以天真的重试响应,过期可能导致非终止或重复锁定,将短暂的时间约束转变为可靠的任务拒绝完成。

这些向量在实践中是可行的,因为它们与常规的网站行为一致,而不是明显的操纵。特别是,异步渲染和第三方组件通常会引入小的状态变化,而时间限制的交互被广泛部署用于安全和防滥用。

4.3 基准设计

Forbes 示例说明这些动态自然出现在真实网站上,并且可以在实践中诱导 TOCTOU 错位。然而,真实世界的页面不提供受控的更新计划或真实标签,使得难以系统性地测试智能体是否以及何时可以通过每个向量被利用。为了实现可重复的测量,我们构建了 DYNwEB,它实例化了上述向量的规范案例,具有确定性的页面更新和任务特定的评判标准。DYNwEB 围绕三个目标设计。

清晰归因:每个实例的构建使得失败可以归因于执行时的 TOCTOU 错位。指令明确无歧义,任务简单且目标导向。页面始终功能正常,避免由不相关的网站错误引起的失败。因此,智能体的错误行为指向 TOCTOU,而不是指令模糊性或任务复杂性。

真实性:场景反映了浏览器使用智能体面临的常见网页界面和工作流,包括新闻浏览、在线购物和表单提交。页面更改遵循现代网站上常见的交互模式,如弹窗对话框、延迟内容加载、异步数据刷新和时间限制的交互。因此,观察到的失败发生在智能体可能在正常使用中遇到的条件下。

可重复性:TOCTOU 取决于智能体规划和页面动态之间的时间。DYNwEB 中的所有页面更改都遵循具有显式时间参数的固定计划。这种时间控制支持跨智能体和跨试验的可重复评估。

清晰评分:每个实例都包含一个清晰的评判标准(布尔值或阈值),基于最终页面状态。评判标准检查智能体是否达到预期目标、遵守谓词和/或在过期前行动。这支持在每次运行结束时进行自动评分。

表 1:DYNwEB 测试用例及其诱导的计划-动作不匹配。类型(I/II/III)对应于利用向量类别。我们用粗体标出指令中的关键动作动词,并用原语类型注释不匹配列。

在这里插入图片描述

重要的是,这些向量指定了攻击者如何触发 TOCTOU 错位,但最终后果取决于攻击者在错位发生后做什么。攻击者可能选择一个公开策略,将单个非预期交互转变为立即的承诺,例如提交表单或确认交易,留给智能体很少的恢复或撤销动作的机会。或者,攻击者可能更喜欢一个更隐蔽的策略,保持交互流程看似合理,同时增加对攻击者控制内容的暴露并影响后续决策。因此,DYNwEB 通过在向量级别评估可利用性,仅对向量是否成功在任务中诱导 TOCTOU 违规进行评分。我们不尝试对下游危害进行评分,这取决于攻击者依赖的后续设计。

基准实例。 DYNwEB 是一个围绕浏览器使用智能体执行的常见日常网页任务为中心的场景集合。代表性任务包括阅读和总结新闻文章、浏览促销或轮播风格内容、在价格或可用性变化下做出购买决策,以及完成时间敏感交互(如身份验证或表单提交)。在各种场景中,智能体执行典型的网页操作,如点击导航元素、基于显示的值选择项目以及在时间约束下提交输入。每个场景将一个自然语言指令与一个支持现实的、目标导向交互的功能性网页配对。详细的场景描述在附录 A 中提供。DYNwEB 围绕 §4.2 中的三个利用向量组织。每个向量通过多个场景实现,支持在不同任务和交互模式上进行受控评估。

除了合成场景,DYNwEB 还包括一组真实世界网站,这些网站展示了浏览器使用智能体常见的自然发生的动态。这些网站通过证明上述向量在有机网络条件下出现(而不仅仅是在构造的页面中),来补充合成套件。我们将它们用作受控场景之外的外部验证案例。

说明性案例。 图 3 说明了一个代表性的 DYNwEB 实例,它在攻击者控制的源下实例化了类型 I(UI 变化)。攻击者提供一个看起来正常的页面,其中包含一个良性的“继续阅读”行动号召,并使用标准网络机制(例如,定时器、异步资源加载或第三方小部件)嵌入一个延迟的 UI 更新。在检查时间,智能体观察初始布局并决定点击可见按钮,要么通过选择元素,要么通过在按钮屏幕位置发出基于坐标的点击。在执行点击的使用时间之前,攻击者触发计划的更新,注入一个订阅提示覆盖层,并将其主要动作(例如“立即订阅”)定位到与原始按钮相同的交互区域。页面对于人类用户保持完全功能且在视觉上合理,但智能体预期动作的语义绑定已经改变。因此,当智能体在使用时间执行计划的交互时,点击解析到覆盖层控件而不是原始的“继续阅读”按钮,将智能体重定向到攻击者选择的订阅流程。

在这里插入图片描述

图 3:类型 I(UI 变化)的 DYNwEB 实例。攻击者控制的源在检查时间 ( t 1 ) (t_1) (t1) 和使用时间 ( t 3 ) (t_3) (t3) 之间注入一个延迟覆盖层,导致智能体的点击解析到非预期的控件,并将其重定向到攻击者选择的流程。

5 缓解措施:执行前验证

为了减轻浏览器使用智能体中的 TOCTOU 风险,执行前验证在每个动作应用之前立即插入一个轻量级检查。这遵循了系统中经典的 TOCTOU 防御原则:尽可能在使用时间附近进行验证。如果验证器检测到相关的页面更改,则暂停执行并通知用户页面已被修改。

5.1 操纵的表现形式

动作执行前的验证需要可观察且跟踪实时界面状态的信号。因此,我们关注两个测量通道。首先,DOM 差异捕获节点的添加和删除、属性翻转和文本更改。其次,渲染和布局差异捕获计算样式更改和元素几何形状的偏移,包括来自覆盖层和重排的包围盒变化。执行前验证监控这两个通道,并将差异视为页面状态不再匹配计划时视图的证据。对于前面定义的三种类型,可观察的痕迹如下。

UI 变化:UI 变化修改哪些元素可见或可点击,或它们出现的位置。它们表现为节点插入或删除,以及改变可见性、指针处理或堆叠顺序的样式或属性更新。覆盖层通常会添加具有高堆叠顺序的新定位节点,也可能通过位移或重排改变附近目标的几何形状。

数据变化:数据变化保持结构大致相同,同时改变与决策相关的内容。它们表现为文本节点更新或承载内容的属性(如价格、可用性、表单值、占位符和可访问性标签)的更新。目标通常仍然存在且可点击,但智能体依赖的值与其在计划时看到的不同。

过期状态:过期状态通过禁用、替换或删除元素来阻塞时间敏感步骤。它表现为节点移除或替换,或改变控件是否接受输入的交互相关属性的切换。过期状态也可能在更改后导致容器折叠或重排,从而引起几何形状变化。

在所有类型中,指标都归结为一小部分:DOM 结构编辑、属性或文本更新,以及布局几何形状偏移。

5.2 监控机制

为了捕获上述可观察信号,我们使用两个浏览器原生观察器 API:用于 DOM 变化的 MutationObserver 和用于布局大小变化的 ResizeObserver。这些选择支持细粒度、事件驱动的监控,比反复遍历 DOM 的传统轮询策略开销更低。这两个观察器是互补的:前者报告 DOM 树的结构和语义更新,而后者在布局后报告元素盒子大小的变化。

MutationObserver。MutationObserver 是一个回调驱动的 API,允许客户端脚本观察 DOM 树的变化。我们在文档上注册一个根观察器,并传播到影子根和同源 iframe 中,确保嵌入小部件或动态附加的影子 DOM 中引入的操作也被捕获。配置被微调以关注影响交互语义的突变,从而减少来自纯样式更新的噪声。具体来说,我们监控三类变化:(i) 子节点插入或删除,(ii) 属性更改,以及 (iii) 文本内容修改。

对于属性更改,我们进一步使用 attributeFilter 约束检测。该过滤器针对与元素可交互性或语义直接相关的字段,包括 idclasshrefsrcdisabledhidden 以及可访问性描述符如 rolearia-*。通过这样做,我们避免报告样式更改(例如背景颜色),同时可靠地捕获对抗性信号,如隐藏的覆盖层、禁用的按钮或修改的标签。每当发生相关突变时,浏览器将记录追加到突变队列,然后通过事件循环异步传递。这种事件驱动模型确保了连续覆盖而无需忙等待,其性能开销与相关更改的数量成比例,而不是与页面大小成比例。

ResizeObserver。ResizeObserver 是一个浏览器原生 API,报告观察元素尺寸的变化。它通过捕获未出现在 DOM 突变队列中的纯几何效应(例如重排、重新缩放或样式引起的偏移)来补充突变记录。此能力至关重要,因为某些操作保持 DOM 结构完整,从而逃避 MutationObserver 的检测。一个代表性的例子是注入具有高 z-index 的覆盖层。虽然 DOM 树保持不变,但覆盖层改变了底层元素的包围盒并位移了它们的可点击区域。这种效应通过调整大小事件很容易观察到。

在我们的设计中,观察器附加到可见元素,并在其包围盒发生变化时发出回调。由于可见元素集随着用户滚动或新节点出现而动态演变,观察器集被增量维护:元素在变得可见时注册,一旦离开视口则取消注册。此策略确保瞬态操作(如滑动广告)和持久覆盖层都能在界面中被一致检测到。

通过用几何观察补充结构和语义监控,ResizeObserver 将覆盖范围扩展到更广泛的网页操作,使得对抗性更改无法仅依靠布局级效应来逃避检测。

5.3 验证-执行周期

核心机制如算法 1 所示。在捕获新观察 o t o_t ot(DOM 快照 D D D)后,监控器附加 MutationObserver 和 ResizeObserver 并开始记录更改。当智能体规划下一个动作 a a a 时,监控器并行运行并记录结构、属性、文本和几何更新。在派发动作之前立即执行同步检查队列。如果队列为空,系统执行 a a a 并分离监控器。如果存在更改,系统中止 a a a,清除监控器状态,并触发用户警报以通知检测到页面更改。因此,验证作为一个同步屏障:除非页面直到执行时刻保持稳定,否则不会执行任何动作。完整的缓解框架总结在图 4 中。工作流如下展开:首先,智能体通知自动化框架启动监控。然后监控器开始持续收集 DOM 和布局更新。同时,当前观察 o t o_t ot 被返回给智能体并用于规划下一个动作。当规划完成时,智能体验证自监控开始以来是否记录了任何页面更新。如果未检测到更改,计划动作 a a a 被传递给执行器执行。如果检测到更改,动作被中止,并引发用户警报。

算法 1:带 DOM 和布局监控的验证-执行周期

在这里插入图片描述

在这里插入图片描述

图 4:缓解框架。智能体在规划动作时监控 DOM 和布局变化,仅当验证确认稳定时才继续执行。

该设计确保监控与规划并行运行,并且每个动作都由一个验证步骤把关。实际上,可利用的间隙被限制在最终监控器查询和执行调用之间的百毫秒级延迟内。虽然严格原子性在客户端无法保证,但该框架强制了一个稳定的计划-验证-执行周期,将对抗性操作限制在一个难以利用的残余窗口内。

在这里插入图片描述

表 2:收集的 10 个浏览器使用智能体及其支持的观察和动作模态。

6 评估

为了研究 TOCTOU 漏洞和执行前验证的有效性,我们围绕以下研究问题组织评估:

  • RQ1:现有浏览器使用智能体在多大程度上存在 TOCTOU 漏洞,这些漏洞如何随观察空间和动作空间变化?
  • RQ2:执行前验证在缓解 TOCTOU 漏洞方面的效果如何?
  • RQ3:执行前验证引入的运行时开销是多少?

6.1 实验设置

目标智能体。 为了评估执行浏览器任务的智能体中 TOCTOU 漏洞的普遍性,我们从 GitHub 收集了 10 个代表性智能体。注意,并非所有收集的智能体都是特定于网页的。有些是通用的计算机使用智能体,可以将浏览器作为其中一个应用程序进行操作。我们将它们包括在内,并在我们的浏览器任务上评估它们的性能,以提供 TOCTOU 鲁棒性的统一比较。选择由两个标准指导。首先,智能体被广泛使用或积极维护,如其 GitHub 流行度所示,最高达 68.4k stars。其次,该集合提供了跨观察空间和动作空间的覆盖,以便可以跨设计选择比较结果。表 2 总结了所选智能体。

评估用例。 我们的评估使用两组用例。第一组由 §4.3 中描述的合成 DYNwEB 场景组成。每个用例将一个真实的用户指令与一个可执行的评判标准配对,因此智能体行为可以一致评分,偏差可以归因于计划中的操作。

第二组由五个在自然环境中表现出相关动态的真实世界网站组成。这些网站使智能体暴露于有机内容刷新、布局可变性和广告驱动的界面变化中,这些很难在精心制作的页面中完全捕获。对于每个网站,我们指定一个指令和一个评判标准,并将其映射到我们的操作类型之一。用例分布总结在表 3 中,详细信息在附录 §A 中。

评估方法。 对于每个智能体和每个评估用例,我们在提供的指令上运行智能体,并使用用例评判标准判断结果。所有在合成页面上的实验都在本地受控环境中进行。

对于真实世界用例,运行期间由人类观察者监控执行。如果评判标准表明发生了 TOCTOU 错位,并且交互似乎可能导致有害或非预期的效果,则立即停止运行。最终结果由评判标准确定,并通过人工检查智能体轨迹和任务结果确认,这为比较智能体和评估缓解措施的影响提供了一致的基础。

6.2 RQ1:漏洞结果

表 3 总结了 9 个合成 DYNwEB 用例和 5 个真实世界用例的 TOCTOU 结果。在大多数评估的框架中,TOCTOU 漏洞被触发。所有 10 个智能体至少在一个操作类型上失败。大多数智能体在所有三种操作类型上都存在漏洞,只有一小部分能抵抗类型 I UI 变化。合成和真实世界网站的一致结果表明,TOCTOU 漏洞在实际环境中持续存在。

结果分析。 浏览器使用智能体可以沿着两个维度(观察空间和动作空间)进行表征。这些轴上的不同选择导致在操作下的不同行为,因此使用这种分解来分析结果。

在这里插入图片描述

图 5:三种操作类型下 TOCTOU 漏洞的触发率。此处,n 计算每种类型的用例数量,包括合成场景和真实世界网站。

关于观察空间,基于截图的智能体在所有操作类型上始终存在漏洞。相比之下,依赖结构化观察(如 DOM 或可访问性树)的智能体通常能抵抗类型 I UI 变化。然而,这些智能体在类型 II 和类型 III 操作下仍然失败,其中页面更新与决策相关的值(如价格或标签),或使时间敏感步骤(如 OTP 提交)失效。混合系统显示出混合结果。Midscene 在所有三种类型上都失败,类似于基于截图的智能体,而 WebVoyager 和 Browser-Use 能抵抗类型 I。总体而言,观察空间本身并不能决定对 TOCTOU 漏洞的敏感性。

动作空间产生更清晰的模式。使用类人交互的智能体在类型 I 用例中失败,因为动作由屏幕坐标参数化,而不是稳定的目标标识。即使是很小的布局偏移也可能导致相同的坐标落在不同的元素上,从而重定向动作。Midscene 说明了这个问题。尽管它接收结构化观察,但它通过类人交互执行动作,因此同样脆弱。相比之下,依赖结构化 UI 访问的智能体通常能抵抗类型 I UI 变化,因为动作通过选择器或 DOM 引用绑定到元素,而不是绝对坐标。如果预期元素仍然存在,交互将应用于同一目标。如果它消失,动作通常会失败而不是被重定向。

这些结果突出了两点。结构化 UI 访问提高了对布局级 UI 变化的鲁棒性,但它不能解决类型 II 和类型 III 的情况,在这些情况下目标保持不变但其含义或有效性发生变化。更广泛地说,TOCTOU 漏洞是由动作选择和执行之间的时间间隔驱动的,仅靠结构化观察或元素级定位无法解决这一问题。

对 RQ1 的回答:所有 10 个评估的浏览器使用智能体在至少一种操作类型下都存在 TOCTOU 漏洞。结构化 UI 访问提高了对类型 I UI 变化的鲁棒性,但没有一种设计能防止类型 II 数据变化和类型 III 过期状态交互下的失败。

在这里插入图片描述

表 3:在各个评估用例上触发 TOCTOU 漏洞的结果。类型 I/II/III 对应于三类页面动态:UI 变化、动态数据更新和过期状态。$\checkmark$ 表示成功触发漏洞。$\checkmark$ 表示尝试失败。

6.3 RQ2:缓解措施的有效性

对于缓解措施评估,我们在 OpenAI 发布的开源 CUA 框架 openai-cua-sample-app 之上实现了我们的机制。RQ1 显示该框架在所有三种操作类型下都失败,这使其成为评估缓解措施的合适目标。该缓解措施与框架无关,可以应用于其他智能体。

有效性在 RQ1 中使用的相同 14 个用例上进行评估,包括 9 个合成用例和 5 个真实世界用例。每个用例执行 10 次。如果在任何一次运行中触发了 TOCTOU 漏洞,则该用例被计为一次触发,意味着该防御对该用例失败。还包括一个仅提示的基线,其中系统提示提醒智能体注意页面更新。图 5 报告了触发率,定义为每种操作类型下导致漏洞的用例比例。没有缓解措施时,所有三种操作类型的触发率均为 100 % 100\% 100%。仅提示的基线没有显示出可测量的改进。启用执行前验证后,触发率在所有测试用例中降至 0 % 0\% 0%,表明该机制阻止了所有评估的操作。

结果分析。 基于提示的基线失败,因为它没有改变智能体与页面交互的方式。系统提示中的警告不能阻止智能体根据早期观察选择动作,然后在页面更改后应用它们。相比之下,我们的方法通过插入执行前验证来改变工作流。监控器跟踪 DOM 和布局变化,每个动作在应用前立即被验证。这种计划-验证-执行工作流在我们评估中阻止了所有测试的操作。

该机制降低了风险,但不提供严格的原子性。Web 平台没有提供通用的原语来冻结页面演变或将验证与后续交互耦合为不可分割的步骤。因此,验证和动作应用仍然是两个独立的操作。此外,变化检测不是瞬时的。基于观察器的信号通过事件循环异步传递,因此页面变化可能在其反映到监控器状态之前发生。最后,浏览器自动化框架将验证和交互作为背靠背命令执行,而不是单个原子操作,这在最终检查与动作之间留下了一个小的残余窗口。

在我们的实现中,残余漏洞窗口测量约为 0.13 秒。假设智能体规划时间约为 10 秒,这意味着减少了大约 10 / 0.13 ≈ 77 10 / 0.13 \approx 77 10/0.1377 倍。与可能从几秒到几十秒不等的原始规划延迟相比,易受攻击的窗口现在被限制在验证和执行之间的短暂间隙内。从攻击者的角度来看,情况发生了显著变化。最初,间隙跨越几秒并覆盖整个规划阶段,因此攻击者可以简单地在该间隔内安排页面刷新以触发 TOCTOU 漏洞。现在残余窗口既短得多(约 0.13 秒),又被转移到规划之后。由于规划本身的持续时间取决于内部因素(如硬件速度和网络延迟),它会随机变化,并且对攻击者不可观察。因此,攻击者无法可靠地预测残余窗口何时发生,使得难以成功安排操作。

对 RQ2 的回答:所提出的机制在我们的评估中成功防止了所有 TOCTOU 漏洞被触发。尽管无法实现严格原子性,但残余窗口被减少到规划后的一个短间隔,使得在实际中利用变得不切实际。

6.4 RQ3:性能开销

部署的一个关键因素是缓解措施引入的运行时开销。由于浏览器使用智能体在交互式环境中运行,即使是小的延迟也可能在长动作序列中累积。因此,我们测量每个决策周期增加的额外延迟,报告为每循环开销。为了捕捉跨网络环境的变化,我们在研究中使用的 14 个网站上评估开销,包括真实世界页面和合成用例。图 6 总结了结果。

在所有站点上,每循环开销保持小且稳定。特别是,额外延迟低于 0.05 s 0.05\mathrm{s} 0.05s。这种低开销是因为监控依赖于异步运行的浏览器原生观察器 API,并且验证仅检查自上一周期以来收集的突变记录。额外延迟接近浏览器事件派发的测量噪声,并且比单个 LLM 推理步骤通常需要的 5-15 秒小几个数量级。因此,即使在许多交互循环中,相对于通常持续数分钟的端到端任务持续时间,累积开销仍然可以忽略不计。

在这里插入图片描述

图 6:跨合成(S#)和真实世界(R#)任务的每迭代执行开销。每个计划-验证-执行周期增加的平均延迟始终低于 0.05 s 0.05\mathrm{s} 0.05s

对 RQ3 的回答:缓解措施在每个计划-验证-执行循环中增加了不到 0.05 s 0.05\mathrm{s} 0.05s 的开销。与智能体推理通常需要的几秒相比,这个成本可以忽略不计,表明该机制没有引入明显的运行时开销。

7 讨论

局限性与补充防御。 虽然我们的执行前验证大大降低了 TOCTOU 风险,但它并没有完全消除执行时窗口。页面状态仍然可能在动作应用之前立即发生变化,或者在动作本身期间发生变化,这使得智能体尽管经过验证仍可能错误执行。我们在附录 B 中进一步分析了残余 TOCTOU 窗口并对其可利用性进行了压力测试。

一个补充方向是执行后语义验证,智能体检查动作的结果,而不是试图防止所有错位。在执行动作后,智能体观察结果页面状态,并根据用户目标、预期动作和观察到的效果总结该步骤。然后,LLM 可以作为评判者,评估观察到的结果是否与预期步骤语义一致。如果结果被判断为不一致,智能体将该步骤视为失败并触发恢复,例如从更新后的状态重新规划。这种方法可以检测并遏制否则会悄无声息地传播的错误,但它有重要的局限性。判断依赖于模型,并且由于随机性和偶尔的幻觉,可能在不同运行间不稳定。它还引入了额外的运行时开销,因为每次交互都需要额外的观察和额外的推理调用来进行判断,这可能会在多步骤工作流中显著增加端到端延迟。

对智能体友好的网页设计。 执行前验证监控广泛的界面变化以最大化防御覆盖。它跟踪结构编辑、语义更新和布局偏移,同时尝试忽略纯粹的样式更改(如背景颜色更新)。在实践中,许多网站因良性原因频繁更改,包括广告刷新和动态小部件。这些更新并非旨在阻碍浏览器使用智能体,但它们仍然可能触发监控器并导致不必要的暂停或警报。

随着浏览器使用智能体变得越来越普遍,网页设计选择可以影响自动化交互的可靠程度。避免不必要的布局变动、保持交互元素稳定以及将广告与主要控件分离的界面,可以减少意外的 TOCTOU 触发,并提高智能体和人类用户的可用性。此类实践可以在不改变核心网站功能的情况下提高兼容性。

迈向原子验证和动作的浏览器原语。 当前的网络平台没有提供原语让外部代理将验证与后续交互耦合为单个原子步骤。即使智能体验证了 DOM 快照或布局几何,页面仍可能通过脚本、定时器、动画和网络驱动的更新继续演变。浏览器也没有暴露一个通用的、可选择加入的机制,让代理在提交交互时暂时抑制这些非确定性来源。因此,验证和动作应用仍然是分离的操作,在当前实现中持续存在一个小的残余 TOCTOU 窗口。

一个有希望的方向是浏览器和代理框架之间更紧密的合作,以支持原子的验证-执行语义。一个选项是作用域化的“冻结”原语,在短时间内且在定义良好的区域内(例如,子树、框架或目标元素的命中测试区域),暂停 DOM 突变、影响布局的样式更改和覆盖层插入,同时允许页面在作用域外保持可用。另一个选项是一个事务性交互 API,允许代理提交一个动作以及一个前提条件,例如相关 DOM 属性的摘要、目标元素标识或其包围盒。浏览器仅在前提条件仍然成立时执行动作,否则返回结构化失败,提示代理重新观察和重新规划。这些可选择加入的原语将为支持的交互更紧密地耦合验证和执行,并可能在不需对代理逻辑进行侵入性更改的情况下消除残余窗口。

8 相关工作

许多先前的工作研究了越狱和提示注入风格的攻击,其中对抗性指令或不受信任的内容引导 LLM 行为偏离预期目标 [12, 29, 41]。当 LLM 被集成到使用工具的智能体中时,此类攻击可以被操作化为非预期的工具调用和数据外泄,包括通过环境或检索提供的内容起作用的间接提示注入 [20, 25]。除了指令级操纵,依赖视觉语言的计算机使用智能体可能受到对抗性弹窗的攻击:注入界面的可点击视觉元素,分散智能体对其预期任务的注意力并诱导非预期的点击 [39]。还进一步提出了现实的对抗性测试平台,以在操作系统和网络堆栈上执行多阶段利用 [19]。这些威胁促使了系统级防御的发展,这些防御强制执行工具使用的隔离和策略门控。CaMeL [9] 将规划与执行分离,以便下游工具调用根据显式策略进行检查。AgentSentinel [14] 通过运行时拦截和审计补充了这一方向,监控执行轨迹和敏感操作,以标记可疑行为并在智能体运行期间门控高风险操作。

两个密切相关的工作明确讨论了智能体执行中的 TOCTOU 风格时间间隙。最近的一项工作系统化了计算机使用智能体的安全性,并强调当外部状态在观察和交互之间发生突变时,TOCTOU 是一个重要风险 [15]。另一项工作在与经典 TOCTOU 更接近的设置中,检查了通用工具使用智能体循环中的 TOCTOU:智能体读取或验证外部资源状态(例如文件、记录或工具管理的对象),然后随后发出依赖更新,并且该资源可能在中间被另一个进程或攻击者修改 [21]。从概念上讲,智能体在 ReAct 风格的循环中迭代进行:观察、推理、调用工具或交互,然后再次观察。在那篇论文 [21] 中,TOCTOU 被框架化为围绕工具调用间的依赖关系,其中后来的更新隐式地依赖于先前读取或验证的资源状态保持不变。相比之下,我们研究单个浏览器使用迭代中的 TOCTOU,其中智能体在检查时间页面状态下识别目标,但页面在交互应用之前发生突变,改变了同一页面内动作的语义。

9 结论

这项工作揭示了浏览器使用智能体中 TOCTOU 漏洞的普遍存在。由于网页可以在检查时间和使用时间之间发生变化,智能体可以在过时的假设下执行交互,产生一个可被攻击者控制的页面动态利用的漏洞窗口。通过使用规范场景的基准 DYNwEB 以及对 10 个开源智能体的研究,评估表明 TOCTOU 漏洞在不同观察和动作空间中广泛存在。为了缓解这一风险,我们引入了执行前验证,在每个动作应用之前立即检查相关的页面更改。在评估中,我们的防御阻止了所有展示的操作,同时增加了可忽略的运行时开销。

总体而言,本研究提供了对浏览器使用智能体中 TOCTOU 漏洞的系统分析,并展示了一种无需重新训练模型或彻底改造现有框架即可集成的实用缓解措施。未来的工作包括浏览器级原语,以实现验证和动作之间更紧密的耦合,这可以进一步减少或消除残余的 TOCTOU 窗口。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐