### Micco's Home Page ### Welcome to Micco's page!!
Sorry, but this web page is written in Japanese.
<English>
■ 更新情報
■ このWebページについて
■ お知らせ
■ ダウンロード
■ DLL のインストール方法
■ SFX の設定例
■ いろいろ
対応ブラウザー
[Internet Explorer] [Firefox] [Opera] [Sleipnir] [Safari] [Google Chrome]
連絡先:Micco
[e-mail]
[→『脆弱性情報一覧』] [→Home]

<公開:Aug.24,2010 最終更新:Sep.17,2010>

MHSVI#20100824:
LHMelt における安全でないライブラリーのロードによりリモートでコードが実行される脆弱性


概要

 LHMelt は, 複数の形式に対応した圧縮・展開等の書庫操作を行うソフトウェアです。 LHMelt には安全でないライブラリーのロードによりリモートでコードの実行される脆弱性が存在します。

影響を受けるモジュール及びシステム

  • LHMelt Ver 1.65.1.2 及びそれ以前
  • 上記をコマンド的に使用している一部のアプリケーション

詳細情報

 LHMelt は, 書庫操作を行うためのライブラリーを利用することで各種形式書庫に対する圧縮・展開といった操作を行う, いわゆるアーカイバーソフトウェアです。 LHMelt は, 『統合アーカイバ』の API 仕様に準拠した書庫操作を行うためのライブラリーを呼び出すことで各種形式書庫に対して操作を行いますが, 安全でないライブラリーのロードによりリモートでコードの実行される脆弱性が含まれており, 任意のコードを実行されたり, クラッシュを引き起こされる可能性があります。

想定される影響

 LHMelt が対応している形式の書庫など任意のファイルが存在するディレクトリー上に安全でないライブラリーが用意された状況で, 当該ファイル (書庫など。) が LHMelt に渡されることで, 任意のコードを実行されたり, サービス運用妨害 (DoS) 攻撃を受ける可能性があります。

対策方法

 最新版 (Ver 1.65.2.5 以降。) へバージョンアップを行ってください。 [ダウンロード]

回避方法

  • LHMelt が対応している全ての『統合アーカイバ』 DLL のうち, 各種書庫用でもっとも優先度の高いもの (後述。) を LHMelt がインストールされているディレクトリー上にインストールする。
    Windows XP SP2 以降の Safe DLL Search Mode の機能が存在する NT 系 OS を使用していて, かつ当該機能が有効となっている場合は, ウインドウズシステムディレクトリー (通常 "C:/Windows/System32"。) でも可。
  • 自身が利用する形式の書庫に対応した『統合アーカイバ』 DLL について上記の条件が満たされている場合については, メニューから残りの DLL について拒否 (無視。) 設定を行うことでも回避が可能。
  • 簡単な確認方法:適当なテキストファイルを, 例えば "UNLHA32.DLL" の名前で作成し, それを任意の書庫と同じディレクトリー上に置いておく。 その上で, 当該書庫を関連付け等で LHMelt に起動と同時に読み込ませる。 「"unlha32.dll" このDLLはロードできませんでした」といった LHMelt の警告や OS の警告が表示されれば, 当該 DLL のロードについて脆弱性が残っている。

 LHMelt が各種書庫用に使用する『統合アーカイバ』 DLL のうち, もっとも優先度の高いものについては次のとおり。

LZH 書庫 UNLHA32.DLL
7z 書庫 7-ZIP32.DLL
ZIP 書庫 UNZIP32.DLL, ZIP32J.DLL, ZIP32.DLL, SFX32GUI.DAT。
なお, ZIP 書庫を 7-ZIP32.DLL で扱う設定となっている場合は これらについては必要なし。
CAB 書庫 CAB32.DLL
TAR 書庫 TAR32.DLL, BZ2LIB.DLL
BGA 書庫 BGA32.DLL
ISH ファイル ISH32.DLL
ARJ 書庫 UNARJ32.DLL
GCA 書庫 UNGCA32.DLL
RAR 書庫 UNRAR32.DLL, UNRAR.DLL
その他 B2E32.DLL
例外 CTL3D32.DLL

 Safe DLL Search Mode の存在しない, Windows XP (非 SP1 以降。), Windows 2000, Windows NT, Windows Me を始めとする Win9x 系 OS については, 『統合アーカイバ』 DLL のみではなく, LHMelt がインストールされているディレクトリー上に存在しない全てのシステムファイル (.DLL, .SYS, .DRV, .CPL, etc..., LHMelt から間接的に呼び出される可能性のある全てのもの。) が該当します。 従って, これら OS の使用はお勧めしません。

技術情報

 本脆弱性は, LHMelt が『統合アーカイバ』 DLL を任意のディレクトリー上から読み込めるように作成されているため発生します。 LHMelt は対話型のアプリケーションですが, 起動時スイッチを指定してコマンドライン的に使用されることがあり, また, ユーザーによって DLL のインストール先が様々に異なるため, LHMelt 側で明示的に読み込み元を指定してのロードは行っていません。 (カレントディレクトリーを利用するケースもあったことから, SetDllDirectory() API による設定も行っていません。)

 読み込み元を明示的に指定していない場合, Windows は定められた優先順位に従って複数のディレクトリーを検索して DLL を読み込みます。 例えば Safe DLL search mode が有効の場合は次のようになります:

  1. LHMelt のインストールされているディレクトリー
  2. ウインドウズ・システムディレクトリー
  3. 16 ビット用システムディレクトリー
  4. ウインドウズディレクトリー
  5. カレントディレクトリー
  6. 環境変数 PATH で指定された各ディレクトリー

この時に, カレントディレクトリーが検索対象となっているため, 『統合アーカイバ』 DLL と同じ名前の細工された攻撃用 DLL と同じディレクトリー上に書庫など任意のファイルを置き, 当該書庫等を関連付けなどを利用して起動と同時に LHMelt に開かせることで, 攻撃用 DLL を読み込ませることが可能となります。

DLL の読み込み時には必ず初期化が行われることから, 初期化ルーチンにおいて LHMelt に継承されているユーザー権限の範囲で任意のコードを実行することが可能となります。 初期化ルーチンを利用できることから, 細工された攻撃用 DLL が『統合アーカイバ』の仕様を満たしている必要はありません。

補足情報

 今回の脆弱性に対応した Ver 1.65a 以降の LHMelt では, カレントディレクトリーからの DLL 等のロードが禁止されることから, 「他のプロセスにフック等で接触し監視等を行うソフト」がカレントディレクトリーからのロードに依存していた場合, 当該ソフトが LHMelt への接触に失敗し, LHMelt の起動時等に「○○が見つからなかったため、 このアプリケーションを開始できませんでした」の警告が表示される結果となります。

 例えば, StarSoftcomm の StarCenter は常駐した上で他のプロセスを監視していますが, 「カレントディレクトリーからのロード」に依存しているため, Ver 1.65a 以降の LHMelt への接触に失敗し, 結果として LHMelt の起動時に「SCFunc.dll が見つからなかったため、 このアプリケーションを開始できませんでした」が表示されます。 「同一環境 (状況) で常に」でない辺りが困りものなのですが, 当該ソフトについては, Adobe Air のインストーラーを使用した際に, 比較的多く同様の問題が発生しているようです。

 StarCenter に限らず, 「○○が見つからなかったため~」が表示された場合は, その当該 DLL を使用しているソフトに「安全でないライブラリのロードにより、リモートでコードが実行される (マイクロソフト セキュリティ アドバイザリ 2269637)」の脆弱性が存在することになります。 特に, 他のプロセスを監視する類のソフトでは影響が甚大 (ソフトの性格からして, システム・管理者権限で動作, 若しくは それらの権限を取得可能な状況で動作している可能性が高い。) ですので, 可能であれば, 当該ソフトの更新や乗り換えを検討したほうが良いかもしれません。

更新履歴

  • 脆弱性情報の公開 [Aug.24,2010]
  • 回避方法での DLL 一覧を別記とし, 付属的なものを追加 [Aug.25,2010]
  • 参考情報に MSDN の情報を追加 [Aug.25,2010]
  • 対策版 (Windows XP SP1 以降。) 公開に関する情報を追加 [Aug.26,2010]
  • 参考情報に Microsoft KB の情報を追加 [Aug.27,2010]
  • 参考情報に JVN の情報を追加 [Aug.28,2010]
  • 全環境対応対策版公開に伴う情報の変更 [Sep.01,2010]
  • 技術情報に情報を追加 [Sep.02,2010]
  • 補足情報を追加 [Sep.17,2010]

参考情報

[→Page top] [→『脆弱性情報一覧』] [→Home]