XSS(Cross Site Script)와 XFS(Cross Frame Script)의 차이

⚠️ XSS에 대한 전반적인 내용은 Cullinan > XSS 페이지에서 관리하고 있습니다. 해당 페이지에서 최신 데이터가 유지되니 참고 부탁드려요 :D

XFS는 사실상 어느정도 XSS에 속하는 취약점이지만 그래도 별도로 불려지고 있는 공격 방법입니다. 오늘은 XFS에 대한 이야기를 할까 합니다.

XFS란?

Cross-Frame Scripting (XFS) is a method of exploiting Cross-site Scripting (XSS). In an XFS attack, the attacker exploits a specific cross-frame-scripting bug in a web browser to access private data on a third-party website. The attacker induces the browser user to navigate to a web page the attacker controls; the attacker’s page loads a third-party page in an HTML frame; and then javascript executing in the attacker’s page steals data from the third-party page. XFS also sometimes is used to describe an XSS attack which uses an HTML frame in the attack. For example, an attacker might exploit a Cross Site Scripting Flaw to inject a frame into a third-party web page; or an attacker might create a page which uses a frame to load a third-party page with an XSS flaw.

XSS와 XFS 차이

둘의 차이는 간단합니다. 이름 그대로 XSS는 크로스 사이트간에서 발생하는 스크립팅 취약점이고, XFS는 크로스 프레임간 발생하는 스크립팅 취약점입니다. 보통은 크로스 사이트의 범위가 더 크기 때문에 XFS가 XSS 속하기도 합니다. (iframe을 이용한 XSS 정도로)

만약 GET /viewer?page=/test/index.html 과 같은 형태로 viewer 페이지에 page 파라미터를 통해 전달할 때 아래와 같이 노출되는 기능이 있다고 가정합니다.

output

<iframe src="/test/index.html" width=100 height=100></iframe>

다만 실제로 차이가 보이는건 frame 영역의 특징인데요, 아무래도 보안 정책에 의해 어느정도 샌드박싱 되어 있기 때문에 사실상 XSS 보다 영향력은 살짝 떨어집니다. 동일하게 스크립트가 동작하여도 구동되는 위치가 다르기 떄문이죠. 그래도 src에 javascript, data 등의 프로토콜이 명시되는 경우 XSS와 유사하게 스크립팅이 가능합니다.

<!-- input : GET /viewer?page=https://www.hahwul.com -->
output : <iframe src="https://www.hahwul.com" width=100 height=100></iframe>

<!-- input : GET /viewer?page=javascript:alert(45) -->
output : <iframe src="javascript:alert(45)" width=100 height=100></iframe>

<!-- input : GET /viewer?page="><script>alert(45)</script><hahwul a="1 -->
output : <iframe src=""><script>alert(45)</script><hahwul a="1" width=100 height=100></iframe>

<!-- input : GET /viewer?page=xss" onload=alert(45) a=" -->
output : <iframe src="xss" onload=alert(45) a="" width=100 height=100></iframe>