본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다.
분석 레포트
https://hackerone.com/reports/2419227
공격자는 new.loading.page.html 파일 내 쿼리 매개변수의 부적절한 처리에 기인하는 취약점을 악용하여 URL 쿼리를 조작하여 자바스크립트를 삽입할 수 있다 ( URI를 삽입할 수 있다. ). ?redirect_to=javascript:alert("XSS")와 같이 조작된 URL 매개 변수로 redirectToLanding 함수를 트리거하면 취약한 코드가 삽입된 스크립트를 실행하여 크로스 사이트 스크립팅(XSS) 악용을 유도한다.
이 취약점은 쿼리 매개 변수를 부적절하게 처리하여 공격자가 자바스크립트를 삽입할 수 있도록 허용하기 때문에 발생한다. URI를 new.loading.page.html 파일 내에 리디렉터로 삽입할 수 있다.
[ 실제 대상 page와 일치하지 않습니다. ]
[ locationData[2] console에 찍어보기]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Redirect Test</title>
<script>
var redirectToLanding = function() {
console.log(window.location.search)
var locationData = window.location.search.match(/(\?|&)redirect_to=([^&]+)(&|$)/);
if (locationData === null) {
console.log("Hello!!!");
window.location.reload(true);
} else {
console.log("Hmmmmmmm..........")
console.log(locationData);
console.log(decodeURIComponent(locationData[2]));
// window.location = decodeURIComponent(locationData[2]);
}
};
</script>
</head>
<body>
</body>
</html>
<?php
if(isset($_GET['redirect_to'])){ ?>
<script>redirectToLanding();</script>
<?php } ?>
URL의 쿼리가 ?redirect_to=javascript:alert("123")인 경우, locationData [2]는 'javascript:alert("123")'과 같다. 결과적으로 redirectToLanding을 트리거하면 XSS 익스플로잇이 발생한다.
이로 인해, 공격자는 javascript: URI를 삽입하여 무단 스크립트를 실행하여, 세션 쿠키와 같은 민감한 정보를 훔치거나 사용자를 대신하여 작업을 수행할 수 있다.
해당 로직은 제거되었고, 이전 피해사실도 없다고 한다.