iframe XSS Playground

DOMPurify sanitize 정책이 iframe 을 어디까지 허용하는지 검증하기 위한 PoC 모음. 모든 페이지는 부모 사이트에서 <iframe src=...> 로 임베드된 상황을 가정합니다.

주의. 본인이 권한을 가진 서비스(예: 알렌 dev/staging) 에 대해서만 임베드해서 테스트하세요. 타인의 서비스에 시도하면 부정접근 에 해당할 수 있습니다.

시작하기

  1. 좌측에서 검증할 공격 시나리오 페이지를 선택합니다.
  2. 페이지 상단에 나오는 <iframe src="https://..."></iframe> 스니펫을 복사합니다.
  3. 타깃 서비스(알렌 마이노트 에디터 등)에 그 스니펫을 붙여 넣고 저장, 렌더링된 페이지에서 실제 동작을 확인합니다.
  4. 부모 페이지 임베드 헬퍼 에서 sandbox 정책을 바꿔가며 같은 시나리오의 차이를 비교할 수 있습니다.

시나리오 목록

Navigation

top.location 강제 리다이렉트

iframe 안에서 부모 창 전체를 다른 URL로 보내버린다. sandbox allow-top-navigation 유무로 차이를 확인할 수 있는 대표 시나리오.

Communication

postMessage 스푸핑

parent.postMessage 로 부모 페이지에 메시지를 보낸다. 부모가 event.origin 검증을 안 하면 위조된 메시지를 신뢰할 수 있다.

숨겨진 form 자동 submit (CSRF-like)

사용자 모르게 외부 도메인으로 form 을 submit 한다. cookie 가 자동 첨부되는 사이트라면 CSRF 가 된다. sandbox 의 allow-forms 로 제어 가능.

navigator.sendBeacon / fetch exfiltration

iframe 자기 origin 안에서 수집한 정보(클릭 좌표, 키 입력, document.referrer 등)를 attacker 서버로 보낸다.

img 태그 GET 요청 CSRF

img.src 에 외부 도메인의 상태변경 GET 엔드포인트를 넣어 쿠키와 함께 요청을 보낸다. 가장 오래된 CSRF 패턴.

Phishing

가짜 로그인 폼 (피싱)

iframe 안에 부모 사이트와 똑같이 생긴 로그인 폼을 보여주고 입력값을 외부로 빼낸다. 입력값은 자기 origin 으로 가니까 SOP 와 무관하게 동작한다.

풀스크린 오버레이 위장

iframe 을 CSS 로 화면 전체를 덮게 만든 다음 부모 사이트와 똑같은 UI를 띄워 사용자를 속인다. iframe 자체는 자기 origin 에서 자유롭게 그릴 수 있다.

Annoyance

자동 다운로드 트리거

사용자 클릭 없이 파일 다운로드를 강제로 시작한다. download 속성 + 가짜 클릭, 또는 Blob URL 이용.

popup / window.open 스팸

window.open 으로 새 창을 띄운다. 자기 origin 으로 띄우면 다양한 피싱 UI 를 보일 수 있고, 부모와는 opener 관계로 연결된다.

자동재생 미디어 / 자동 풀스크린

소리 있는 비디오를 자동재생하거나, requestFullscreen 으로 풀스크린을 점유한다. 풀스크린은 사용자 제스처가 필요하지만 일부 우회 패턴이 알려져 있다.

알림 권한 요청 / 푸시 hijack

Notification.requestPermission 으로 권한 프롬프트를 띄운다. 사용자가 허용하면 attacker.com 도메인에서 푸시를 보낼 수 있게 된다.

클립보드 hijack

사용자가 iframe 영역에서 무언가를 복사할 때 clipboard 이벤트를 가로채 다른 내용을 덮어쓴다.

history.pushState 오염

history.pushState / replaceState 로 자기 origin URL 을 마구 쌓아 부모의 뒤로가기 동작을 망가뜨린다. 자기 origin 안에서만 동작.

Probe

Same-Origin Policy 프로브 (실패 확인용)

parent.document, parent.localStorage, 부모 쿠키 등을 시도해서 어떻게 차단되는지 보여준다. '안 되는 것' 을 직접 확인하는 페이지.

부모의 message 리스너 fingerprinting

다양한 형태의 postMessage 페이로드를 부모에게 던지고, 부모에서 어떤 응답이 돌아오는지(또는 사이드 이펙트가 있는지) 관찰한다. 알렌 리스너 구조 탐색용.