Help us understand the problem. What is going on with this article?

Yet Another XSS on Amazon

More than 3 years have passed since last update.

本記事は脆弱性"&'<<>\ 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)

shinkbr
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away