1. shinkbr

    Posted

    shinkbr
Changes in title
+Yet Another XSS on Amazon
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,47 @@
+本記事は[脆弱性"&'<<>\ Advent Calendar 2016](http://www.adventar.org/calendars/1404)の14日目の記事です。
+
+昨年の[脆弱性"&'<<>\ Advent Calendar 2015](http://www.adventar.org/calendars/811/)では[AmazonにXSSを2つ報告した記事](http://qiita.com/shinkbr/items/4867beb2858fa6e854b7)を書きましたが、これの2つ目のXSSに類似したXSSを最近またAmazonに発見・報告したお話です。
+
+# 概要
+
+<img width="696" alt="screenshot_alert_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/53690/7e2a8d07-e013-fdaf-c3e0-69cc4cf11000.png">
+
+<img width="828" alt="screenshot_html_with_box.png" src="https://qiita-image-store.s3.amazonaws.com/0/53690/e6aa190a-6c9d-a491-fd7e-fe655b45651f.png">
+
+スクリーンショットの通り、www.amazon.co.jpの検索バーから`'><script>alert(1)</script>` と検索するだけで起きる反射型XSSです。
+
+```html
+<div data-ad-details='{"adPlacementMetaData": {"searchTerms": "<the_search_query>", ...}}'>
+```
+
+という風にシングルクオートで囲ったattributeに検索クエリを含むJSONを書き込んでいる箇所で、シングルクオートがエスケープされていないことが問題でした。
+
+```html
+<div data-ad-details='{"adPlacementMetaData": {"searchTerms": "'><script>alert(1)</script>", ...}}'>
+```
+
+このようにJSONやJavaScriptの中に含まれる文字列では、問題を引き起こしている`'`を含め検索クエリ全体をUnicode Escape Sequenceに変換して`\x27\x3e\x3cscript\x3ealert\x281\x29\x3c\x2fscript\x3e`とするのが安全なエスケープ方法です。
+
+```html
+<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"](https://www.amazon.co.jp/dp/B0044Q3IL4)という楽曲が仕事をしてくれたおかげで`'><script>alert(1)</script>`によりXSSが確認できました。(画像1枚目)
+
+なので、今回もjjencodeなどで検索を邪魔しないようにして`<script>`タグを注入することで任意のJavaScriptを仕込むことができました。
+
+<img width="696" alt="screenshot_alert_document.domain.png" src="https://qiita-image-store.s3.amazonaws.com/0/53690/a0ae25a4-2dfa-cd35-7333-de3b86d3498f.png">
+
+2016/12/9に報告し、1日で修正されました。ちなみに、その修正方法が少し変わっていて、検索クエリをbase64で出力するというものでした。
+
+<img width="831" alt="screenshot_html_base64_with_box.png" src="https://qiita-image-store.s3.amazonaws.com/0/53690/9ba5a0e2-a3c6-751d-32be-bd398d74add9.png">
+
+```bash
+% echo -n 'Jz48c2NyaXB0PmFsZXJ0KDEpPC9zY3JpcHQ+' | base64 -D
+'><script>alert(1)</script>
+```
+
+# 結論・所感
+Amazonにバグバウンティ来ないのか (575)