본문 바로가기

버그바운티 리포트 분석

[ 1-Day ] XSS in new.loading.page.html

본 포스팅은 학습 목적으로 작성되었으며, hackerone report를 기반으로 작성되었습니다. 

 

분석 레포트

https://hackerone.com/reports/2419227

 

GoCD disclosed on HackerOne: XSS in new.loading.page.html

 

hackerone.com

 

공격자는 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를 삽입하여 무단 스크립트를 실행하여, 세션 쿠키와 같은 민감한 정보를 훔치거나 사용자를 대신하여 작업을 수행할 수 있다.

 

 

 

 

해당 로직은 제거되었고, 이전 피해사실도 없다고 한다.