本記事は脆弱性"&'<<>\ Advent Calendar 2016の14日目の記事です。
昨年の脆弱性"&'<<>\ Advent Calendar 2015ではAmazonにXSSを2つ報告した記事を書きましたが、これの2つ目のXSSに類似したXSSを最近またAmazonに発見・報告したお話です。
概要
![screenshot_alert_1.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F53690%2F7e2a8d07-e013-fdaf-c3e0-69cc4cf11000.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e2c4069a67414753789aafc0b374f686)
![screenshot_html_with_box.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F53690%2Fe6aa190a-6c9d-a491-fd7e-fe655b45651f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=6fc64ebd961ecc0937df726f60cc3f1c)
スクリーンショットの通り、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が確認できました。(画像1枚目)
なので、今回もjjencodeなどで検索を邪魔しないようにして<script>
タグを注入することで任意のJavaScriptを仕込むことができました。
![screenshot_alert_document.domain.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F53690%2Fa0ae25a4-2dfa-cd35-7333-de3b86d3498f.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=a4075cdfae810d7956fe3917ce224f20)
2016/12/9に報告し、1日で修正されました。ちなみに、その修正方法が少し変わっていて、検索クエリをbase64で出力するというものでした。
![screenshot_html_base64_with_box.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F53690%2F9ba5a0e2-a3c6-751d-32be-bd398d74add9.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=75330c2e8ca4e742c16a258c83bc40a0)
% echo -n 'Jz48c2NyaXB0PmFsZXJ0KDEpPC9zY3JpcHQ+' | base64 -D
'><script>alert(1)</script>
結論・所感
Amazonにバグバウンティ来ないのか (575)