
비전-언어 웹 에이전트에 대한 적대적 이미지 공격: 시각적 그라운딩부터 브라우저 실행까지
적대적 이미지가 웹 에이전트를 시각적 그라운딩에서 브라우저 실행으로 탈취한다
Wanjing Han, Levi Taiji Li, Mu Zhang, Yue Jiang, Guanhong Tao — University of Utah
WebMirage는 시각 기반 웹 에이전트를 위한 레드팀 프레임워크입니다. 공격자가 제어하는 웹페이지 이미지(예: 제품 썸네일이나 프로필 사진)에 국소화된 적대적 교란을 삽입하여, 다양한 웹페이지 렌더링 환경에서 에이전트가 공격자의 요소를 선택하고 해당 브라우저 동작을 실행하도록 만듭니다. 이 공격은 모델 추론 단계에만 국한되지 않고, 시각적 그라운딩부터 브라우저 실행까지 엔드투엔드로 설계됩니다.
이를 가능하게 하는 두 가지 구성 요소는 다음과 같습니다:
이 프레임워크는 여섯 개의 VLM 백본(LLaVA, MiniCPM-o, Phi-3 Vision 등)에 걸쳐 SeeAct 및 VisualWebArena 에이전트를 대상으로 평가됩니다. 전체 평가는 논문을 참조하십시오.
.
├── 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 # 클린 vs. 교란에 대해 추론을 실행하고 결과를 비교
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 대화 파일이 포함됩니다. 대화 파일의 이미지 토큰 플레이스홀더는 대상 백본과 일치해야 합니다:
| Backbone | Placeholder |
|---|---|
| MiniCPM-o | (<image>./</image>)\n |
| LLaVA | <image>\n |
| Phi-3 | <|image_1|>\n |
엔드투엔드 평가에는 대상 에이전트 프레임워크가 필요합니다.
scripts/seeact/를 참조하십시오.scripts/visualwebarena/를 참조하십시오.dataflow/DataflowAnalysis.ql은 에이전트의 후처리 코드에서 어떤 모델 출력 토큰이 실행되는 브라우저 동작으로 흘러가는지 추적하는 데 사용되는 CodeQL 쿼리입니다. dataflow/codeql-pack.yml의 팩 정의를 사용하여 CodeQL CLI로 대상 에이전트의 소스에 대해 실행하십시오.
논문의 모든 공개 웹사이트 실험은 클라이언트 측 자산 교체를 사용합니다: 적대적 이미지는 에이전트의 로컬 브라우저 뷰에서만 대체되며, 어떠한 콘텐츠도 제3자 사이트에 업로드되거나 수정되지 않습니다. 이 프레임워크는 방어적 연구 목적으로만 사용하십시오.
@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를 참조하십시오.