今回取り上げるのは、ターゲット自身が、細工したページを経由することでつけられたリファラによって攻撃を受けるケースです。このような攻撃の場合は、現実に経由可能なページからでしか攻撃文字列を送りこむことができません。
例えば、以下のように、document.referrerをそのままdocument.write()しているページがあるとします。
http://vulnerabledoma.in/location/
リファラを書き出している部分でXSSできるでしょうか。
IEでは単純です。
IEはURLのクエリに、エンコードせずに「"<>」などを含めることができるので、これらを含むURLから、リファラを書き出しているページへ遷移させれば、XSSが起きます。
http://l0.cm/xss_referrer.html?<script>alert(1)</script>
Firefox・Chrome・Safariなどのブラウザの場合は、「"<>」はクエリ中でエンコードされるのでこのPoCではスクリプトは実行されません。
IE×リファラ でXSSが可能なことは、知ってる人は知っているのではないかと思いますが、 今回は、ChromeやSafari(6.1で確認)でも攻撃が可能だということを紹介します。今日言いたいのはここです。たぶん、まだ誰も公開していない手法だと思います。
はい:
data:text/html,<meta name="referrer" content="always"><script>if(location.protocol!='data:'){alert(1)}else{location.href="http://vulnerabledoma.in/location/"}</script>
「<meta name="referrer" content="always">」という、リファラ送信を制御するタグ( http://wiki.whatwg.org/wiki/Meta_referrer )をつけると、通常はリファラを送信しないdata: URLからでもリファラを送信してくれるようです。こうすると、ChromeやSafariで「"<>」をリファラに含められます。
Firefoxでも今後、 <meta name="referrer">をサポートしたら攻撃が可能になるかもしれません。
以上、XSS小ネタでした。
2014/6/30 追記
この手法は2014/6/30時点で最新のChrome(35.0.1916.153)
Safariで動作する別の手法について新しい記事を書きました。(基本的にはdata: からblob: にしただけ)
Referrer文字列によるXSS part2
http://masatokinugawa.l0.cm/2014/06/referrer-xss-part2.html
2014/9/22 追記
Safari(7.1)で確認したところ、動かなくなりました。
0 件のコメント:
コメントを投稿