주말 밤 트위터를 통해 재미난게 있나 구경하던 도중 익숙한 구문이 리트윗 되는 광경을 목격했습니다. 관련해서 링크 읽어보니 재미있는 상황이더군요. (https://leucosite.com/Firefox-uXSS-and-CSS-XSS/)
내용을 이야기하자면 오래된 XSS 테스팅 코드가 있는데, 현재에는 거의 막혀있습니다. 재미있는 버그 하나와 이 코드를 이용해서 XSS가 가능한 사례인데요. 가볍게 읽어보도록 합시다.
Context Menu?
보편적으로 우클릭 시 나타나는 메뉴를 지칭합니다. 오늘 내용이 이 Context menu와 관련이 있어 간략하게 소개합니다.
GUI Application에선 굉장히 편리한 메뉴이지요. (Burp extender 만드는데 이거땜에 조금 빡쳤..)
Bug!?
웹 브라우저, 즉 Javascript 상 Context 메뉴의 재미있는 점은 Context menu가 열린 상태에서 페이지가 이동되면 Context menu를 연 곳에 내용을 가지고 있다는 점입니다. Context menu가 열리고 페이지가 리다이렉션 될 때 소스보기로 보면 이동된 페이지가 아닌, 이동 시켜준 원본 페이지의 소스가 나타나게 됩니다.
|
|
Vulnerability
이러한 점을 이용하여 A 사이트에서 Context menu로 공격코드를 불러오고(background-image가 여기서…쓰이다니) 이를 redirection 된 b 사이트에서 실행하여 해당 도메인의 영역에서 스크립트가 동작할 수 있게 해줍니다. 이렇게 동작하면 bookmarklet이나 debugger 계열 스크립트처럼 페이지 내부에 직접 삽입된 것과 동일한 효과를 가져 대상 도메인에서 코드가 동작할 수 있게 됩니다.
코드를 보면..
1초 간격 차이로 공격코드 페이지와 타겟 페이지를 띄웁니다. 이는 뒤 공격코드 페이지에서 history,back()으로 페이지를 넘겨 해당 도메인에서 코드가 실행되게 사용한 방법이죠.
|
|
공격코드인 imgXss.html 파일입니다. 실제론 XSS 삽입 페이지 여러개로 구성할 수 있을듯합니다.
imgXss.html
|
|
아주 고전적인 공격코드인데, CSS에 배경 이미지 부분에 Javascript 코드를 넣습니다. 그리고 사용자에게 우클릭을 유도 후 view backgroudn image를 누르게 하여 Javascript를 실행하게 하는데요, 여기서 1초 뒤 history.back()으로 아까 addons 페이지로 넘깁니다. 그럼 Context menu는 공격코드쪽 페이지니 Javascript를 호출하도록 할 것이고 도메인은 Addons에서 동작하게 됩니다.