何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 36162
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

前回は、この記事→「なんか、おもしろい→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
コメント
  • # re: 対処したようだ→IE 経由 FireFox の脆弱性
    Jitta
    Posted @ 2007/07/31 22:07
    http や https はすでに登録されているので、「FireFox だけ」ってのは間違い、ですね。
  • # re: 対処したようだ→IE 経由 FireFox の脆弱性
    Jitta
    Posted @ 2007/07/31 22:08
    > Windows が引数を適切に加工しない
    "%1" なんだから、「ダブル クォーテーションは加工しなければならない」のは、自明でした。
  • # re: 対処したようだ→IE 経由 FireFox の脆弱性
    ちゃっぴ
    Posted @ 2007/07/31 22:56
    > Windows が引数を適切に加工しないので(って、どう加工すればそれぞれのアプリケーションにとって「適切」なんだろう?)、

    Windows level では無理ですね。
    CreateProcess の仕様を変えればできないことないと思いますけど。引数を配列として受け取るように変更すればね。

    でも、互換性のために古いのも残さなければならない。

    現在でも、lpCommandLine すら使っていないいい加減な CreateProcess の wrapper があることからして、作ったからといって実装してもらえるようになるのはいつの日か。。。

    そのくらいのことやるなら、もっとマシな process 起動仕様を新たに作るべきだと思います。
    # どうせなら PowerShell のように object 渡したいですね。

    現状では、OS level ではどうにもならなくて、application level でなんとかするより仕方ないですね。
  • # re: 対処したようだ→IE 経由 FireFox の脆弱性
    Jitta
    Posted @ 2007/08/20 22:41
    うっはーーーー!!!
    これ、もしかして、.xls なんかが DDE でファイル名渡しているの、関係したりするかも?!
  • # re: 対処したようだ→IE 経由 FireFox の脆弱性
    Jitta
    Posted @ 2007/08/26 22:11
    たぶん、関連。→ http://blogs.wankuma.com/jitta/archive/2007/07/20/86082.aspx
    コマンドラインで渡すと、こんな問題が発生するから、DDE 渡しに切り替えたのではないか?知っているならアナウンスしてよ>マイクロソフト
    ちなみに、Opera も DDE を使用するようになっている。あるいは、Mozilla 開発陣が知らなかっただけ?
タイトル
名前
Url
コメント