アカウント名:
パスワード:
どうみても仕様。こういうのをどや顔で脆弱性報告しちゃうのはどうかと思うし、受け付けちゃうのもびっくりする。日本のITスキルの水準がわかる事例。
msiファイルを置いただけのフォルダからDLLを読む必要がどうしてあるんかね。仕様とは思えないが?
今回挙げられているMS製品のインストーラーは全てexe形式だと思います。msi形式のインストーラーも影響範囲に含まれるという情報を見つけられなかったのですが、どこで確認できますか?
MFC等のアプリで使用しているDLLを偽造してカレントに置いておけば、システムが勝手にカレントのDLLをロード(起動時に動的リンクされたライブラリを自動的に読み込む)してしまうのよ。
つまり、一切ランタイムを使わないでインストーラを作れって話になるんだけど。
システムディレクトリ等から読み込みたいのなら、そう指定すべきでは?元々カレントにあったDLLを上書きする、という話ならその通りですが。
動的リンクされたライブラリのロードは、OSがやります。その際、カレントディレクトリ、システムディレクトリの順で対象のDLLを探すので今回の話になるわけです。(動的リンクしたライブラリの読込場所は指定できない)
一応、動的リンクをやめて、全てのライブラリをloadlibraryで読み込む様にすれば、回避できるけど、普通はやらないね。(MFC等のクラスライブラリを使ってるとほぼ不可能だと思う)
一応。カレントディレクトリは「実行ファイルのディレクトリ」の意味で記載してます。
なるほど、普通にMFC等を使おうとするとそうコンパイルされるわけですね。LoadLibraryできちんと指定していすればいいとは聞いていたので、MS製品はやってるのだろうと思ってました。
>つまり、一切ランタイムを使わないでインストーラを作れって話になるんだけど。
https://micco.mars.jp/vul/2017/mhvi20170718.htm [micco.mars.jp]↑ここに詳しく載ってますが、KERNEL32.DLLやUSER32.DLL、またそれらから間接的に呼ばれるDLLであるNTDLL.DLLやSSPICLI.DLLすらヤバイので。KERNEL32.DLLを「使わない」のも「LoadLibraryで読む」のも不可能。USER32.DLLを「LoadLibraryで読む」のは可能っちゃ可能ですが、ものすげー面倒くさい。
拡張子がMSIなら、実行されるのはc:\windows\system32\msiexec.exe。ロードオーダーはEXEパス>カレントなので、たとえばMFC42.dllとかをダウンロードフォルダに置いても、c:\windows\system32\mfc42.dllとかに負けてしまうので該当しない、という話だよね。厳密にいえば、シリアルNOベリファイのためにカスタムDLLを読み込むようなMSIも作れたとは思うけど。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家
イミフ (スコア:0)
どうみても仕様。こういうのをどや顔で脆弱性報告しちゃうのはどうかと思うし、受け付けちゃうのもびっくりする。日本のITスキルの水準がわかる事例。
Re:イミフ (スコア:1)
msiファイルを置いただけのフォルダからDLLを読む必要がどうしてあるんかね。
仕様とは思えないが?
Re:イミフ (スコア:1)
今回挙げられているMS製品のインストーラーは全てexe形式だと思います。
msi形式のインストーラーも影響範囲に含まれるという情報を見つけられなかったのですが、どこで確認できますか?
Re: (スコア:0)
MFC等のアプリで使用しているDLLを偽造してカレントに置いておけば、システムが勝手にカレントのDLLをロード(起動時に動的リンクされたライブラリを自動的に読み込む)してしまうのよ。
つまり、一切ランタイムを使わないでインストーラを作れって話になるんだけど。
Re: (スコア:0)
システムディレクトリ等から読み込みたいのなら、そう指定すべきでは?
元々カレントにあったDLLを上書きする、という話ならその通りですが。
Re: (スコア:0)
動的リンクされたライブラリのロードは、OSがやります。
その際、カレントディレクトリ、システムディレクトリの順で対象のDLLを探すので今回の話になるわけです。(動的リンクしたライブラリの読込場所は指定できない)
一応、動的リンクをやめて、全てのライブラリをloadlibraryで読み込む様にすれば、回避できるけど、普通はやらないね。(MFC等のクラスライブラリを使ってるとほぼ不可能だと思う)
Re: (スコア:0)
一応。
カレントディレクトリは「実行ファイルのディレクトリ」の意味で記載してます。
Re: (スコア:0)
なるほど、普通にMFC等を使おうとするとそうコンパイルされるわけですね。
LoadLibraryできちんと指定していすればいいとは聞いていたので、MS製品はやってるのだろうと思ってました。
Re: (スコア:0)
>つまり、一切ランタイムを使わないでインストーラを作れって話になるんだけど。
https://micco.mars.jp/vul/2017/mhvi20170718.htm [micco.mars.jp]
↑ここに詳しく載ってますが、KERNEL32.DLLやUSER32.DLL、またそれらから間接的に呼ばれるDLLであるNTDLL.DLLやSSPICLI.DLLすらヤバイので。
KERNEL32.DLLを「使わない」のも「LoadLibraryで読む」のも不可能。
USER32.DLLを「LoadLibraryで読む」のは可能っちゃ可能ですが、ものすげー面倒くさい。
Re: (スコア:0)
拡張子がMSIなら、実行されるのはc:\windows\system32\msiexec.exe。ロードオーダーはEXEパス>カレントなので、たとえばMFC42.dllとかをダウンロードフォルダに置いても、c:\windows\system32\mfc42.dllとかに負けてしまうので該当しない、という話だよね。
厳密にいえば、シリアルNOベリファイのためにカスタムDLLを読み込むようなMSIも作れたとは思うけど。