对抗性图像劫持 Web 智能体:从视觉定位到浏览器执行
Wanjing Han, Levi Taiji Li, Mu Zhang, Yue Jiang, Guanhong Tao — 犹他大学
WebMirage 是一个针对视觉定位 Web 智能体的红队测试框架。它在攻击者控制的网页图像(例如产品缩略图或个人资料照片)上精心构造局部对抗性扰动,使智能体在不同的网页渲染下选择攻击者的元素并执行相应的浏览器操作。该攻击是端到端构建的,从视觉定位到浏览器执行,而非仅在模型推理阶段。
两个组件实现了这一目标:
该框架针对 SeeAct 和 VisualWebArena 智能体在六种 VLM 骨干模型(LLaVA、MiniCPM-o、Phi-3 Vision 等)上进行了评估。完整评估请参见论文。
.
├── src/ # 扰动优化,每个骨干模型一个子目录
│ ├── LLaVA/
│ ├── MiniCPM-o/
│ └── Phi-3-vision/
├── scripts/ # 训练/评估启动脚本,每个骨干模型一个子目录
├── dataflow/ # 用于智能体数据流分析的 CodeQL 查询包(DataflowAnalysis.ql)
├── data/ # 重组后的训练/测试截图和对话模板
└── test/ # 预生成的干净样本和扰动样本,用于快速验证
在使用此框架之前,必须手动设置基础模型。
由于各骨干模型的库依赖存在冲突,每个模型都需要独立的环境和本地下载的权重。
conda create -n minicpm),并安装依赖。conda create -n llava)。transformers 版本。Phi-3-vision-128k-instruct 权重。一个最小测试在干净截图和扰动截图上运行推理,并并排比较智能体的选择。
注意: 此测试需要 Phi-3 Vision(参见前置条件 §3)。提供的扰动图像是针对 Phi-3 优化的;其他骨干模型的测试数据可以使用
scripts/中的训练脚本生成。
预生成的测试用例位于 test/:
test/
├── clean_fix_slot/ # 干净截图,目标位于固定槽位
├── clean_multi_slot/ # 干净截图,目标跨多个槽位
├── perturbed_fix_slot/ # 扰动截图(ε=16/255),目标位于固定槽位
├── perturbed_multi_slot/ # 扰动截图(ε=16/255),目标跨多个槽位
├── conv.json # 对话数据(系统提示、用户查询、定位提示)
└── verify.py # 在干净与扰动输入上运行推理并比较结果
fix_slot 用例测试伴随元素变化(目标位置固定,周围元素变化);multi_slot 用例同时测试伴随元素变化和位置偏移。
conda activate phi3vision
# Fixed slot position
python test/verify.py \
--model-path /path/to/Phi-3-vision-128k-instruct \
--conv-path test/conv.json \
--clean-image test/clean_fix_slot/sample_0.png \
--perturbed-image test/perturbed_fix_slot/sample_0.png
# Varying slot positions
python test/verify.py \
--model-path /path/to/Phi-3-vision-128k-instruct \
--conv-path test/conv.json \
--clean-image test/clean_multi_slot/sample_0.png \
--perturbed-image test/perturbed_multi_slot/sample_0.png
脚本会打印一个比较表,显示每个测试用例在干净输入与扰动输入下所选择的元素。在干净截图上,智能体应选择最匹配的候选元素;在扰动截图上,它应始终选择攻击者控制的候选元素。
在已为每个骨干模型设置好专用 Conda 环境后,以下工作流以 LLaVA 为例。
脚本引用来自你的主目录(~/)的官方 LLaVA 代码:
cd ~
git clone https://github.com/haotian-liu/LLaVA.git
打开 scripts/LLaVA/train_with_mask.sh,将每个路径(模型权重、训练数据、对话模板、掩码、输出目录)设置为与你的本地环境匹配。
bash scripts/LLaVA/train_with_mask.sh
训练数据位于 data/<scenario>/ 下,包含重组后的截图和 train_samples.json 对话文件。对话文件中的图像 token 占位符必须与目标骨干模型匹配:
| 骨干模型 | 占位符 |
|---|---|
| MiniCPM-o | (<image>./</image>)\n |
| LLaVA | <image>\n |
| Phi-3 | <|image_1|>\n |
端到端评估需要目标智能体框架。
scripts/seeact/。scripts/visualwebarena/ 中的评估脚本,包含 Accessibility Tree 和 Set-of-Mark 两种观察模式。dataflow/DataflowAnalysis.ql 是用于追踪智能体后处理代码中哪些模型输出 token 流入所执行浏览器操作的 CodeQL 查询。使用 CodeQL CLI 并配合 dataflow/codeql-pack.yml 中的包定义,对目标智能体源代码运行它。
论文中所有公共网站实验均使用客户端资源替换:对抗性图像仅在智能体的本地浏览器视图中被替换,不会向任何第三方网站上传或修改内容。请仅将此框架用于防御性研究。
@article{han2026webmirage,
title = {Adversarial Images Hijack Web Agents from Visual Grounding to Browser Execution},
author = {Han, Wanjing and Li, Levi Taiji and Zhang, Mu and Jiang, Yue and Tao, Guanhong},
journal = {arXiv preprint arXiv:XXXX.XXXXX},
year = {2026}
}
MIT。参见 LICENSE。