アカウント名:
パスワード:
この脆弱性は、ユーザが悪質な Web ページを Internet Explorer で閲覧し、特別に作り込まれたリンクをクリックした場合に引き起こされます。そのリンクによって、Internet Explorer はコマンドライン経由で他の Windows プログラムを起動し、悪質な Web ページからそのプログラムに、引用符をエスケープせずに URL を渡します。Firefox と Thunderbird も、この方法で起動可能なアプリケーションに含まれており、
--というオプションを用意して、そこから後ろはオプションとして認識しないようにすればいいのでは。
-url "%1" -requestPending
-requestPending -osint -url "%1"
protocol:dummy" 'arg1' "arg2
foo.exe "%1"
foo.exe "protocol:dummy" 'arg1' "arg2"
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stay hungry, Stay foolish. -- Steven Paul Jobs
結局どちらが悪かったのでしょう? (スコア:3, 興味深い)
モデレータは基本役立たずなの気にしてないよ
Re:結局どちらが悪かったのでしょう? (スコア:3, 参考になる)
今回のFirefoxの修正は、プロトコルが"FirefoxURL"の時だけチェックしているので、他の場合では、同じような脆弱性が引き起こされるはず。例えば、IEと同じ脆弱性があるチャットクライアントがあったとして、そいつが(FirefoxURLの代わりに)HTTPハンドラでFirefoxを呼び出すと、同じ脆弱性で引っかかる。その場合は、そのチャットクライアントの脆弱性とも言えるし、Windowsの脆弱性とも言える。
が、差し当たってそれをFirefox側から直すのは不可能だし、そういう意味でIEの穴もWindowsの穴も塞がっていない。だから、Firefox以外のプロトコルハンドラを登録しているアプリケーションもIEから任意のコマンドライン引数で起動される可能性がある。
Re:結局どちらが悪かったのでしょう? (スコア:1)
Re:結局どちらが悪かったのでしょう? (スコア:2, 参考になる)
呼び出し時の引数 を に変更して、「-osintがある場合-urlの後の引数の数は1個まで」という制限を設けたようです。
Re:結局どちらが悪かったのでしょう? (スコア:0)
Re:結局どちらが悪かったのでしょう? (スコア:4, 参考になる)
Re:結局どちらが悪かったのでしょう? (スコア:0)
CGIに対して偽装したフォームでpostしてセキュ穴開いたら、それはブラウザのせいでもHTTPサーバのせいでもなくCGIの脆弱性なんだから。
Re:結局どちらが悪かったのでしょう? (スコア:0)
それが正しくても、正しくなくても。
alias rm='rm -rf /'
rm hogehoge
で、ディスクがすっ飛んだ時、悪いのはrmじゃないだろう?
もちろん、そういうケースも想定してより安全な動作をするのは好ましいけど
オプションの意味を理解して制御するのは難しい仕事だね
Re:結局どちらが悪かったのでしょう? (スコア:0)
- alias 機能を提供しているのが Windows
- rm の alias を定義したのは Firefox
- rm を実行したのは IE
になっちゃうと思うんだけど、それで OK?
Re:結局どちらが悪かったのでしょう? (スコア:1)
元コメントをあなたの表現に当てはめて解釈するなら以下のような感じかと。
・(脆弱な)alias 機能を提供しているのはIE(Windows)
・rm の alias を定義するのは攻撃者
・rm の(不正な)alias を実行するのもIE(Windows)
・rm が Firefox
で、Firefox は渡された引数を正しく実行しただけなので、悪いのは IE(Windows)ということかと。
Re:結局どちらが悪かったのでしょう? (スコア:3, すばらしい洞察)
> - alias 機能を提供しているのが Windows
> ・(脆弱な)alias 機能を提供しているのはIE(Windows)
括弧内を除けば、同じことを言ってますよね。
> - rm の alias を定義したのは Firefox
> ・rm の alias を定義するのは攻撃者
これは半分は同意するんですが、
[HKEY_CLASSES_ROOT\FirefoxURL_DISABLED\shell\open\command]
@="C:\\PROGRA~1\\MOZILL~1\\FIREFOX.EXE -url \"%1\" -requestPending"
というハンドラを定義したのは Firefox のインストーラな訳で、どちらかというと攻撃者は %1 である hogehoge を渡す側の立場とは考えられませんか?
> - rm を実行したのは IE
> ・rm の(不正な)alias を実行するのもIE(Windows)
これも同じことを言ってますよね。
>・rm が Firefox
これは私は端折りましたが、もちろん同意です。
結局外部からのコマンドの起動を許すべきかと、外部からの信用できない入力文字列を誰が無害化するかという話ですよね?
まず私は URL ハンドラそのものが脆弱だとは思っておらず、定義を行う側が「使いようによっては危険である」ことを認識して、安全に使うように配慮するべきではないかと思っています。微妙なところではありますが...
引数の渡し方としては、例えば SQL の parameterized query のように、フレームワークである Windows/IE が安全に引数を渡す方法を定義する方がいいとは思いますが、それが期待できない状況では最終的に処理する側が実装するべきだと思っています (で、Firefox は実装したわけですが)