XSS / CORS 보안

박동규·2023년 5월 25일
0

XSS

XSS 공격 방식의 예를 살펴보자

Case1

일반 사용자A 가 상품 리뷰를 남기기 위해 리뷰 페이지에 접속했다고 가정하자.
그런데, 해당 리뷰 페이지는 어떤 악성 해커에 의해 감염되어 있는 상태이다.

  1. 악성 해커는 리뷰에 상품이 <script>alert("you are hacked!")</script> 친절해요!! 라는 스크립트를 심어둔 리뷰를 작성해 서버에 요청한다.
  2. 서버는 해당 리뷰를 서버 DB에 저장한다.
  3. 이 후, 사용자A가 리뷰 작성을 위해 리뷰 페이지에 접근해 리뷰 목록을 서버에 요청한다.
  4. 악성 스크립트가 담겨진 리뷰가 노출되며 스크립트가 실행된다.

이러한 과정으로 악성 스크립트가 실행되며 해커는 사용자A의 쿠키, 세션 정보등을 탈취할 수 있다.

여기서 CORS 정책의 개념은 등장하지 않는다.
그렇다면 CORS 정책이 존재하지 않는다면 XSS 공격 방법으로 사용자의 정보를 탈취하기가 너무나도 쉬워진다는게 무슨뜻일까?

Case2

이건, 아래와 같은 상황의 얘기이다.

<script>
fetch('http://google.com').then(/**/) 
  
 ...  // 이 후 해커의 pc로 데이터 전송
</script>

이번엔 악성 해커가 만든 피싱 웹사이트로 예를 들어보자.

  1. 사용자A가 피싱 웹사이트에 접근하여 해당 스크립트가 실행된다.
  2. 스크립트가 실행되며 사용자A 웹브라우저의 출처 http://fishing.com 에서 http://google.com 으로 요청이 전송된다.
  3. google.com 서버는 요청에 대한 응답을 정상적으로 전송한다.
  4. 사용자A의 웹브라우저는 Access-Control-Allow-Origin 헤더에 http://fishing.com 이 존재하지 않고, http://google.com 이 아니므로, 해당 응답을 웹브라우저로 받지 않고 버려버린다.
  5. 스크립트의 실행 결과가 브라우저에 노출되지 않는다.

CORS 정책이 존재하지 않았다면, 웹브라우저에 google.com 서버의 응답 결과가 내려오며, 사용자A는 피싱 웹사이트에 접속하는 것 만으로 개인정보 등을 쉽게 탈취 당할 수 있는 것이다.

이러한 정책으로 인해 Case2와 같은 무분별한 공격을 방어할 수 있다.
(Case1의 경우, 서버에서 XSS 공격 방지 처리가 필요하다.)

하지만, 요청은 얼마든지 변조 될 수 있기 때문에 CORS 정책이 존재한다해서 XSS 공격을 근본적으로 차단할 수 있는 것은 아니다.

참고 : https://evan-moon.github.io/2020/05/21/about-cors/ |
https://tofusand-dev.tistory.com/92 |
https://velog.io/@hunjison/SOP-CORS%EB%8A%94-%EB%B3%B4%EC%95%88%EC%97%90%EC%84%9C-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%A0%EA%B9%8C

0개의 댓글