Cross-origin iframe에서 alert과 confirm, prompt 사용 불가

최근 Chrome Platform Status에 새로운 내용이 하나 올라왔습니다.

https://chromestatus.com/feature/5148698084376576

바로 Cross-origin의 iframe 환경에서 alert(), confirm(), prompt()를 사용할 수 없도록 제외되는 내용인데요. 간략하게 왜 제한되도록 결정되었는지 앞으로 바뀌어야할 부분들은 무엇인지 알아봅시다.

Why?

Chrome 측 설명으로는 cross-origin의 iframe 내 alert 정책 상 단순 alert이 아닌 아래와 같이 origin을 포함하는 alert이 발생하는데요, 이러한 형태의 UX가 굉장히 혼란스럽고, 스푸핑에 활용되고 있어서 이와 같은 결정이 일어났다고 합니다.

현재 직접적으론 Chrome의 대처이지만, 브라우저사들은 Consensus & Standardization을 통해 서로의 정책을 공유하는 경향이 있어서 아마 Safari랑 Firefox도 동일한 정책으로 가져갈 것으로 보입니다.

Firefox: Positive
Edge: No signal
Safari: Positive
Web Developers: No signals

For Pentesters and Hackers

이제 iframe 상에서 xss를 테스트할 땐 기존 alert, prompt, confirm 구문이 동작 안할 가능성이 높습니다. 이에 portswigger를 주축으로 print()를 사용하자고 이야기가 나온 상태이고, 저 또한 dalfox에 바로 반영하고 관련 트윗을 공유했습니다.

print() 이외에도 postMessage 등을 이용한 방법이 있겠지만, 현재 가장 심플한 방법으론 print()가 최선인 것 같네요.

For Developers

Cross origin 관계에서 iframe이 사용되는 경우가 최근에는 많지 않을겁니다. 단 레거시 시스템이나 편의성을 위해 iframe을 사용하는 경우 서비스적으로 문제될 수 있는 부분이라 꼭 체크하시는 게 좋을 것 같습니다.

References