2012/11/27

CVE-2012-0678: Safariのfeed:// URLのUXSS

Safari 5.1.7で発見し、Safari 6で修正された、feed:// URLのUXSSについて書きます。

http://support.apple.com/kb/HT5400
Safari
Available for: OS X Lion v10.7.4, OS X Lion Server v10.7.4
Impact: Visiting a maliciously crafted website may lead to a cross-site scripting attack
Description: A cross-site scripting issue existed in the handling of feed:// URLs. This update removes handling of feed:// URLs.
CVE-ID
CVE-2012-0678 : Masato Kinugawa

発見の経緯

以前ブログに書いたように、Safariには、URLのホストの前の認証情報文字列をlocation.hrefで取得するとき、中身がパーセントデコードされて取得されるという問題がありました。
僕は、この挙動はブラウザの問題だと思ったのですが、Appleは(最終的には修正したものの一度は)「修正する予定はない」という返事をしてきました。じゃあ、実際にこの挙動で問題が起きる部分をみつけて、ブラウザ側の修正の必要性を示してやろうということで、いろいろなページを@付きURLでアクセスしてまわりました。そのときに発見したのがこの問題です。

どんな問題か

Safariでは、フィードのURLにアクセスすると、

http://masatokinugawa.l0.cm/feeds/posts/default

から、

feed://masatokinugawa.l0.cm/feeds/posts/default

のような、先頭をhttp://からfeed://に変えたURLにリダイレクトし、Safariが独自に生成したフィード用のページを表示します。ちなみにこのURLは僕のブログのフィードのURLです。
このfeed:// URLを、@付きURLにして、少し細工してアクセスしてみると、奇妙なことがおきます。

feed://www.apple.com%2Fpr%2Ffeeds%2Fpr.rss%3F@masatokinugawa.l0.cm/feeds/posts/default






masatokinugawa.l0.cmなのに、@の前に書かれたURLの、Appleのフィードが表示されています。試しにここで、アドレスバーで「javascript:alert(document.domain)」とすると、「masatokinugawa.l0.cm」と表示され、masatokinugawa.l0.cm上でwww.apple.comのフィードが展開されていることがはっきりと確認できます。
通信を監視してみると、以下のリソースをとってきています。

http://www.apple.com/pr/feeds/pr.rss?@masatokinugawa.l0.cm/feeds/posts/default


どうも、feed:// URLでは、@以前の文字列をデコードしたURLを、そのページのフィードとして読み込んでしまうみたいです。

これはつまり、ターゲットのサイトに読み込ませる外部のフィードにスクリプトを書くことができれば、XSSが可能ということになります。

Safariではフィード用ページでのJavaScriptの実行を、スクリプトが実行可能な文字列を除去する形で制限しています。しかし、一部適切に制限できていない文字列がありました。
以下のような文字列を外部のフィードに設定するとjavascript: スキームのリンクをfeed:// URL上に設定できてしまいます。

http://l0.cm/safari_uxss.rss
<svg>
<a xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="javascript:alert(document.domain)">
<rect width="1000" height="1000" />
</a>
</svg>
 さあ、これを含んだフィードをさっきのURLに流し込んでみましょう。

 feed://l0.cm%2Fsafari_uxss.rss%3F@masatokinugawa.l0.cm/feeds/posts/default



オーマイゴッド、ですね!

Safariでホストの前に@が付いたURLにアクセスする時は、デフォルトの設定でフィッシング警告が出ていましたが、不幸なことに、feed:// URLに直接アクセスする場合は@付きURLでも警告が出ません。
ちなみに、ターゲットのページがフィードのURLでなくても、feed:// URLで表示させることができます。つまり以下のように、どんなサイトでもXSSのターゲットにできるということです。

feed://l0.cm%2Fsafari_uxss.rss%3F@www.google.com

feed://l0.cm%2Fsafari_uxss.rss%3F@www.facebook.com

feed://l0.cm%2Fsafari_uxss.rss%3F@twitter.com


MacでSafariのアップデートをしていない方は、早急に最新版にアップデートしましょう。
Windows版ではこのブログ投稿現在、アップデートが提供されていません。
Appleから正式な開発終了の告知は出ていませんが、Mac版のSafari 6の公開から4ヵ月が経とうとしているのに、何の動きもないので、もはやこれ以上開発を継続する気はないと思われます。

Safari 5.1.7にはこれ以外にも複数の脆弱性の存在が確認されており、JVNもWindowsユーザーはSafariの使用をやめるよう勧告しています。
WindowsのSafariユーザーは、使用をやめるよう、僕からもお勧めしたいと思います。

0 件のコメント:

コメントを投稿