2012/02/23

CVE-2011-3879: chrome:// URLへのリダイレクト

Chrome Stable Release
http://googlechromereleases.blogspot.com/2011/10/chrome-stable-release.html
[95374] Low CVE-2011-3879: Avoid redirect to chrome scheme URIs. Credit to Masato Kinugawa.

去年の9月に報告し10月に修正された、Google Chromeの(一応)セキュリティバグです。
Google Chromeでは、「chrome:」という独自のスキームでブラウザの設定や履歴の閲覧などができるページが用意されています。通常このスキームにリダイレクトさせたりリンクしたりすることはできません。
ですから例えば、
<script>location.href="chrome://about/"</script>

とかやってもリダイレクトできないし、
<a href="chrome://about/">TEST</a>

とかやっても、クリックでとべないということです。
しかしながら、Location:ヘッダだけはなぜだか違っていました。
Location:chrome://about/

などとヘッダを設定することでリダイレクトさせることができていました。

これにより、chrome:// URL上に表示されるプライベートなコンテンツをフレームに埋め込み、サイトのコンテンツと見せかけたり、chrome:// URL上にXSS脆弱性があった場合に、脆弱な箇所へリダイレクトし、chrome:// URL上の情報を盗まれたりするなどの恐れがありました。(悪用方法として真っ先に思い付いたのがクリックジャッキングで設定の変更をさせることでしたが、ちゃんと制限が施されてあり、設定を変更しようとしても無反応でした。) 現在はリダイレクトできないよう修正されています。
 大した問題じゃないので賞金はもらえませんでしたが、Google Chromeのセキュリティバグを初めて見つけることができ、謝辞にも載せてもらえたので嬉しかったです!
今年はWebアプリケーションの問題よりもブラウザの問題を積極的につついていきたいと思っております。


2012/02/17

ブラウザのXSS保護機能をバイパスする

ChromeやSafariにはXSS Auditor、IE 8以上にはXSSフィルターという、XSSを検知してブロックする機能がそれぞれあります。
今回は、これを回避してみた記録です。

・Chromeでバイパス

はい!ついおととい報告したやつです!

XSS Auditor bypass with U+2028/2029
https://bugs.webkit.org/show_bug.cgi?id=78732


なぜかSafariではブロックされる(中の人も理由がわからないと言っていた)んだけど、Chromeでは動きます。以下で試してみてください。

 http://vulnerabledoma.in/char_test?charset=utf-8&xss=1&body=%3Cscript%3E//%E2%80%A8alert(1)%3C/script%3E

 http://vulnerabledoma.in/char_test?charset=utf-8&xss=1&body=%3Cscript%3E//%E2%80%A9alert(1)%3C/script%3E


JavaScriptのコメントがあるだけのスクリプトタグが挿入されても無害なので、「<script>//this is comment</script>」とかがURL中に含まれ、かつHTML内に挿入されてもXSS Auditorはこれに変更を加えずにスルーするようです。(別に特別スルーしなくてもいい気がするんだけど、無駄な検知をしたくないからかな

そんな中、U+2028/2029がJavaScript中で改行扱いになるのを考慮し忘れて、コメントアウトが続いてるものとみなしてこれまでスルーしてしまったかんじですね。非常にシンプル。

・IEでバイパス

IE8/9のXSSフィルターは、誤検知を減らすためにか、同じオリジンから同じオリジンへのページの移動は、通常ならばブロックするような、XSSと疑わしいリクエストであっても通過させるようです。Michael Brooks氏の以下の資料が参考になります。

 [PDF] Bypassing Internet Explorer's XSS Filter
 http://www.exploit-db.com/download_pdf/17875/


この資料によれば、同一オリジンにオープンリダイレクタか、自由にリンクを記述できるような機能があるなどすればXSSフィルターをバイパスできるとあります。

が、それってわざわざ探さなくても、資料の例のような典型的なrefrected XSSがあるのなら、自分自身をリンクにすればいいのではないか、というのが今これから書きたいことです。つまりこういうことです:

まず、XSSフィルターが有効な状態でこのページから以下のスクリプトが挿入されたリンクへアクセスすると、http://masatokinugawa.l0.cm/ から  http://vulnerabledoma.in/ へのアクセスになるので、XSSフィルターはきちんとブロックしてくれます。

http://vulnerabledoma.in/char_test?charset=utf-8&xss=1&body=%3Cscript%3Ealert%281%29%3C/script%3E

じゃあ、このXSSに脆弱な箇所自身に上のスクリプトを挿入したリンクを作ってみます。

http://vulnerabledoma.in/char_test?charset=utf-8&xss=1&body=%3Ca%20style=font-size:10in%3bposition:absolute%3btop:0%3bleft:0%20href=%22http://vulnerabledoma.in/char_test%3Fcharset%3Dutf-8%26xss%3D1%26body%3D%253Cscript%253Ealert%25281%2529%253C%252Fscript%253E%22%3EXSS%3C/a%3E

URL内に、aタグがあっても、文字を大きくするなどのスタイルを設定しても、またスクリプトタグを2重にパーセントエンコードしたものを挿入しても、IEのXSSフィルターは許容するようです。リンク先のリンクをクリックすると、 スクリプトが動作するはずです。 なぜならこれは http://vulnerabledoma.in/ から http://vulnerabledoma.in/ へのアクセスとなるからです。これでonclickイベントに任意のスクリプトを仕込めるのと同等のXSS攻撃が成立することになります。やったぜ!


はい、こんな具合にXSS保護機能はユーザーを確実にXSSから保護してくれる訳ではありません。
これからも改良はされていくと思いますが、ブラウザの保護を過信せずにきちんとXSS対策しましょう!おわり!


追記

さっきもう1個思いついた!

XSSAuditor bypass with <svg> tags and html-entities.
https://bugs.webkit.org/show_bug.cgi?id=78836


追記2
IEのバイパス方法は既に書いておられる方がいたようです。 Thanks @80vul !

IE XSS Filter Bypass_ccSec  |  cc@insight-labs.org_百度空间
http://hi.baidu.com/_ccsec/blog/item/d878e609a8360bfa37d12223.html

2012/02/08

GoogleからChromebookをもらった

Tシャツとステッカーだけだと思ってたら、Googleからまたプレゼントが届きました!
大きい箱が海外から届いてなんだろうと思ってたら、中身はなんとChromebook!!!びっくりした!!!!パソコンが入ってると思わなかったからいい加減に持ってたよ!





さっそく使ってみようと思ったら、コンセントの形状が海外仕様で、繋げない…!1個余分に棒がついている…!専用のプラグを買ったら無事電源つきました。コンセントがそんなんだったし、キーボードにも日本語が書かれてなかったので、使う時も英語しか無理かなーと思っていたら、最初の設定で表示を日本語にできたし、普段通り日本語をタイプすることもできました。日本国内ではまだ正式に発売してないみたいだけど、すぐにでも日本で出せそうですね。
 Chromebookは一般的なパソコンにあるデスクトップ画面が無くて、Google Chrome上であらゆる操作をするかんじです。あれこれ触ってても意外にブラウザだけでも特に困りません。
まあ、たまにウェブアプリ(Chrome拡張含む)だけではかゆいところに手が届かないと感じることもあるのだけど、これからウェブアプリはどんどん進化・充実していくだろうし、ブラウザ以外で何かできない分Google Chromeの高速性を十分に発揮することができるのかなーと思いました。まだウェブアプリだけでは十分とは言えない状態、あるいはユーザーがウェブアプリだけで事を済まそうしていない状態で、一歩二歩先を勝手に行こうとするかんじが、Googleらしい試みだなーと思います。



大切に使います!
Thank you Google Security Team!