Yet Another XSS on Amazon

3727 단어 취약성xss
이 기사는 취약점"&'<<>\ Advent Calendar 2016의 14 일째 기사입니다.

작년의 취약점"&'<<>\ Advent Calendar 2015에서는 아마존에 XSS를 2개 보고한 기사을 썼습니다만, 이것의 2번째의 XSS와 비슷한 XSS를 최근 또 Amazon에 발견·보고한 이야기입니다.

개요







스크린 샷과 같이 www.amazon.co.jp의 검색 바에서 '><script>alert(1)</script>로 검색하는 것만으로 일어나는 반사 형 XSS입니다.
<div data-ad-details='{"adPlacementMetaData": {"searchTerms": "<the_search_query>", ...}}'>

라는 바람에 싱글 쿼트로 둘러싸인 attribute에 검색 쿼리를 포함한 JSON을 쓰고 있는 부분에서 싱글 쿼트가 이스케이프 되어 있지 않은 것이 문제였습니다.
<div data-ad-details='{"adPlacementMetaData": {"searchTerms": "'><script>alert(1)</script>", ...}}'>

이와 같이 JSON이나 JavaScript안에 포함되는 캐릭터 라인에서는, 문제를 일으키고 있는 '를 포함해 검색 쿼리 전체를 Unicode Escape Sequence로 변환해 \x27\x3e\x3cscript\x3ealert\x281\x29\x3c\x2fscript\x3e로 하는 것이 안전한 이스케이프 방법입니다.
<div data-ad-details='{"adPlacementMetaData": {"searchTerms": "\x27\x3e\x3cscript\x3ealert\x281\x29\x3c\x2fscript\x3e", ...}}'>

jjencode yet again



처음에 이전에 발견한 XSS와 유사하다고 쓴 것은, 이것도 검색 결과 Amazon의 상품이 1개 이상 히트하지 않으면 문제의 부분이 출력되지 않고 XSS가 일어나지 않는다는 성질 때문입니다. 이번에도 "High Alert Status"라는 라벨의 "Degree of the Streets Volume 1"이라는 앨범에 수록되어 있다 "Script Ta Unscripted"라는 곡이 일을 해준 덕분에 '><script>alert(1)</script>에 의해 XSS를 확인할 수 있었습니다. (이미지 첫 번째)

그래서 이번에도 jjencode 등으로 검색을 방해하지 않도록 하고 <script> 태그를 주입하는 것으로 임의의 JavaScript를 넣을 수 있었습니다.



2016/12/9에 보고하여 하루에 수정되었습니다. 덧붙여서, 그 수정 방법이 조금 바뀌고 있어 검색 쿼리를 base64로 출력하는 것이었습니다.


% echo -n 'Jz48c2NyaXB0PmFsZXJ0KDEpPC9zY3JpcHQ+' | base64 -D
'><script>alert(1)</script>

결론·소감



아마존에 버그 바운티 오지 않을까 (575)

좋은 웹페이지 즐겨찾기