金利0無利息キャッシング – キャッシングできます

 | 

2011-07-11

jQuery MobileのXSSについての解説

22:32 | jQuery MobileのXSSについての解説 - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - jQuery MobileのXSSについての解説 - 金利0無利息キャッシング – キャッシングできます

この記事執筆時点でのjQuery Mobileの最新のリリースバージョンであるbeta1を含む全てのバージョンにはXSS脆弱性があり、その結果jQuery Mobileを使ってるサイトの多くにXSS脆弱性があり、未修正の状態のサイトを危険にさらすのは承知の上で書いてますけど、周知させたほうが良いと考えてブログに書いている次第です。

下の方に現行のバージョンにはセキュリティリスクがありますよ、と書いてあって、上の方には次のベータ版は2週間ぐらいで出るわ、みたいな感じで、あいつらのリリーススケジュールとかセキュリティ意識とか色々おかしいんで、自分たちの責任で何とかした方がいい。

beta1よりも前のバージョンはCSSセレクタを意図して書かれたコードでタグが生成される問題でXSSがある。

beta1含む全バージョンにはXHR Level2 対応ブラウザでcross-domain読み込みを許可した任意のHTMLを表示できるXSSがある

まとめると

  • beta1には外部ドメインのコンテンツを読み込んでしまうXSSがあります。
  • alpha版にはCSSセレクタ誤認によるXSSと、外部ドメインのコンテンツを読み込んでしまう2種類のXSS脆弱性があります。

alpha版を使ってるサイトは両方対策する必要があります。

以下 2011-07-30 追記

動く仕組み

XSSがあるかどうか判別する用途のURLを作ってあって、こんな感じで使う

http://jquerymobile.com/demos/1.0b1/#//ma.la/tmp/jqm.html

なぜこれが動くのかというと http://ma.la/tmp/jqm.html のレスポンスヘッダには

HTTP/1.1 200 OK
Date: Fri, 29 Jul 2011 13:44:27 GMT
Server: Apache
Access-Control-Allow-Origin: * ← これ
Content-Length: 710
Connection: close
Content-Type: text/html

どのドメインからも読み込みを許可する、という指定を入れてある。設置ドメインからの相対パスが指定されて任意のURLを読み込んで表示されるようになっているところを、http:// で始まる完全なURLもしくは // でプロトコルが省略されたURLを指定することで任意のHTMLファイルを読み込んで表示することが出来る。

似たような事例

これはjQuery Mobileの脆弱性であるけれど、ブラウザの実装ポリシーに関するやや複雑な事情もはらんでいる。それはXHR Level2でクロスドメイン読み込みが可能になっているということを意識せずに書かれたコードが、ブラウザのバージョンアップによって脆弱性のあるコードに変化するという問題だ。これについては過去に軽く言及していて

http://subtech.g.hatena.ne.jp/mala/20101021/1287670869

  • XHR level2によって「XHRは同一ドメイン上のコンテンツしか読めない」という前提が崩れている。
    • 同一ドメインしか読めない前提で設計されているGreasemonkeyや拡張機能は、危険な挙動になっている可能性がある。
    • 任意のURLを読み込む機能があるが、特に読み込み先のURLをチェックせず「XHRで例外が発生する」ことに依存している、というケース。
  • これは拡張機能だけではなく、例えばクエリパラメータでURL(またはURLの一部)を受け取って、Ajaxで任意のコンテンツを読み込むような設計のウェブサイトに影響がある。
    • もしバリデーションなしに任意のURLを読み込んで、HTMLとして描画する機能を備えていた場合、悪意のあるscriptが混入する可能性がある。

可能性としては想定していたけれど、実際にはJavaScriptで任意のURLが読み込めるという状況はとても珍しく(ある程度JavaScriptを積極的に活用しているようなサイトでなければ起こりえないので)、はてなぐらいでしか見たことがない。(ちなみに次のページを継ぎ足して表示する機能において、ユーザーが入力したリンクのclass名に細工をして、次のページへのリンクを誤認させるというものだ)

XHR Level2によるクロスドメイン通信は、サーバー側のレスポンスヘッダで許可を与えさえすればクライアント側では特別な設定は必要がない。ブラウザ側ではデフォルトで許可されている。なので今までは単にエラーが起きていたようなコードが、XHR Level2対応ブラウザでは脆弱性になる。注目すべきはHTML5によってバグが脆弱性に格上げされているということで、ブラウザ機能の拡張によってリスクが高まるという問題は、jQuery Mobileに限った話ではない。

同一ドメインにリダイレクタがあるケース

  • 読み込み可能なURLを同一ドメインに限定した場合でも、同一ドメインにオープンリダイレクタがある、というケースがある
  • 明確な仕様なのかどうか分からないので確実なことは言えないのだが、Firefoxの場合、リダイレクトした上でAccess-Control-Allow-Originで許可されている場合は読み込みに成功する
  • Firefox + 同一ドメインの任意リソースを読み込めるようなJavaScriptが使われている場合、同一ドメインにオープンリダイレクタがあることが致命的な脆弱性になる
  • jQuery Mobileのアップデートはまもなくリリースされるだろうが、状況や実行環境が限定されるとはいえ、JavaScript側の修正だけでは不完全であることに注意すべき

さらになにかあれば

あとで書く

SecuritySecurity2011/09/06 09:20I think mobile security is the next frontier and needs to be managed really carefully. More importantly, there needs to be a device-level security framework that can ensure that such vulnerabilities, like jQuery's mobile XHR, cannot compromise the system, but rather, just be isolated to the application.

Cheers
www.contentsecurity.com.au

 |