前回は、この記事→「なんか、おもしろい→IE 経由で FireFox の脆弱性」
バグ情報は、こちら→「Bug 384384 (IDEF2595) ? Multiple Vendor Multiple Browser Interaction URI Handler Command Injection Vulnerability」
Bug 384384 (IDEF2595) ? Multiple Vendor Multiple Browser Interaction URI Handler Command Injection Vulnerabilityより、テキトー訳
II.説明
iDefenseは、IE7とFirefox 2の組合せに起因するセキュリティ問題を報告します。
付属のPoCは読めなかったです(コピーを得て働き続ける)、しかし、説明はトールLarholmのウィンドウのためのサファリ功績が http://larholm.com/2007/06/12/safari-for-windows-0day-exploit-in-2-hours/ でbloggedしたようで、おそらく類似しています。
複数のブラウザによる外部アプリケーションURIの処理の入力処理脆弱性のリモート利用は、ローカルユーザーとしてリモート・コード実行を許すことがありえます。
リモート攻撃者は、Mozilla Firefoxをインストールしてある Internet Explorerユーザーに任意の命令を実行させることができます。
特に造られたリンクでiFrameをつくることによって、攻撃者は任意のプログラムを実行することがありえます。そして、ファイルはカレントユーザとしてダウンロードされることがありえるか、アップロードされることがありえるか、変更を加えられることがありえます。
この脆弱性は、プログラム間の対話によります。
Internet Explorerは、若干のURLで二重引用文字をエスケープしません。
これは、特に造られたリンクがFirefoxに複数の引数と解釈させます。
III.分析
この脆弱性の搾取は、攻撃者がカレントユーザとして任意の命令を実行するのを許します。
この脆弱性を利用するために、攻撃者は悪意をもって造られたリンクを含んでいるウェブサイトをつくらなければなりません。
犠牲者は、Firefoxをインストールしており、しかし、現在実行しないことを条件とします。
Internet Explorerが『firefoxurl:でフレームを要請する時』、URI、Internet ExplorerはSRC(源)パラメーターから引数を供給して、Firefoxを起こします。
URLを開くとき、Firefoxは以下のコマンド行で始められます:
[path/to/firefox.exe] -url "%1" -requestPending
「%1」は、ソースURLと入れ替えられます。
URLがスペースが続く二重引用文字を含むならば、引用は閉じられます、そして、残りのソースURLは新しい引数とみなされます。
'-chrome'(ユーザーインターフェース)オプションを供給することによって、XPCOMをインターフェース機能と呼ぶJavaScriptが続いて、攻撃者は任意の命令を実行することができます。
XPCOM(クロスプラットフォーム・コンポーネントオブジェクトモデル)は、同じベース・コードが複数のプラットホーム上で複数のアプリケーションのために使われるのを許可するMozillaベースの製品により用いられるフレームワークです。
FirefoxのためのXPCOMユーザーインターフェース・コードはシステム上で根底にあるコードにアクセスします。そして、オペレーティングシステム全体に標準化されたインターフェースを提供します。
このレベルでブラウザと対話しているコードはあらゆる活動を実行することができます。そして、ブラウザを実行しているユーザーはそうすることができます。
この脆弱性は、Windows版アップルのサファリ・ウェブ・ブラウザのベータ版で、類似している脆弱性に関連があります。
プロテクトモード(それは、デフォルト設定です)のIE 7によるビスタで、対話はFirefoxを実行したいことを確認するよう頼みます。
IV. 発見
iDefenseは、これの存在に動いているInternet Explorer 7からFirefoxバージョン2.0.0.4で利用可能な脆弱性がXPSP2をウインドウに表示すると確証しました。
前バージョンは、影響を受けることもありえます。
この脆弱性が外部プログラムに渡されるURLでダブルクォートをエスケープしていないInternet Explorerによる間、実符号実行はFirefoxから来ます。
2つのプログラムの間のインタラクションは、この脆弱性の源です。
V.回避方法
iDefenseは、現在この問題のためのあらゆる回避方法を知らなくて、Internet Explorerでウェブを閲覧している間、Firefox実行を保つことより別です。iDefense研究室このレポートがそうするはずである他の潜在的回避方法と意志最新版を研究しますあらゆる利用できます。
FireFoxURL なんて URL を登録するのは FireFox しかなくて、それはこのバグ レポートにも #5 のコメントで書かれている。なんか、Vista で標準のブラウザとして登録することができないというバグに対応するために加えた、とか書かれているんですけど?
う~ん。。。Vista はまだ本格的に使ってないからなぁ。Vista が使えるようになったら、Opera を標準で使うブラウザとして登録してみよう。まぁ、Opera も http や gopher なんかのプロトコル別に標準として登録できるから、同じような設定をしているかもしれない。
で、何が IE ...というか、Windows のバグかというと、ここかな。
URLがスペースが続く二重引用文字を含むならば、引用は閉じられます、そして、残りのソースURLは新しい引数とみなされます。
こんな感じ?
「FireFoxURL:fakep://FireFoxVulnerability" -chrome"
」って書いておくと、「[path/to/firefox.exe] -url "fakep://FireFoxVulnerability" -chrome"" -requestPending
」と展開され、どうなるか知らないけど、指定されたらまずい "-chrome" が FireFox に対して3つめの引数となる、、、って?
え~~~!!SQL Injection と同じやん。。。
元々、ファイル名の展開用途に使うもので、ファイル名には入力の時にダブル クォーテーションが入らないようにしているから、展開されるはずがない、、、はずだった。
使われる前提が変わってきているのだから、マイクロソフト側にも対応して欲しいけど。。。でもなぁ。。。それを一方的に「マイクロソフトが悪い」というのは、どうよ?ソース→Mozilla Foundation セキュリティアドバイザリ 2007-23注意: 他の Windows アプリケーションもこの方法で呼び出すことが可能であり、悪質なコードの実行に利用される可能性があります。今回の修正は Firefox や Thunderbird に危険なデータが渡るのを防ぐだけであり、Internet Explorer の脆弱性は修正されません。
そもそも、Bug 354005 - Setting the app as the OS default is broken on Vista の対応方法を間違っていたんじゃないかなぁ?
もう一度書いておくと、今のところ、ファイル名以外のものが入力されるように登録しているのは、FireFox だけ、のようです。つまり、ブラウザやプラグインで、独自のプロトコルを、レジストリエントリの HKEY_CLASSES_ROOT に登録するようなものは、Windows が引数を適切に加工しないので(って、どう加工すればそれぞれのアプリケーションにとって「適切」なんだろう?)、同じような問題が発生するかもしれません。
ちなみに、Internet Explorer は、アプリケーション引数としてではなく、DDE で引数を渡すようにしています。Opera 9.22 で、http を Opera 優先に変えてみましたが、同じように、HKCR/http/shell/open で、command に Opera を登録し、DDE で引数を渡すように登録されました。
投稿日時 : 2007年7月31日 22:04