Yet Another XSS on Amazon

  • 5
    いいね
  • 0
    コメント

本記事は脆弱性"&'<<>\ Advent Calendar 2016の14日目の記事です。

昨年の脆弱性"&'<<>\ Advent Calendar 2015ではAmazonにXSSを2つ報告した記事を書きましたが、これの2つ目のXSSに類似したXSSを最近またAmazonに発見・報告したお話です。

概要

screenshot_alert_1.png

screenshot_html_with_box.png

スクリーンショットの通り、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

2016/12/9に報告し、1日で修正されました。ちなみに、その修正方法が少し変わっていて、検索クエリをbase64で出力するというものでした。

screenshot_html_base64_with_box.png

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

結論・所感

Amazonにバグバウンティ来ないのか (575)