### 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]

<公開:Nov.10,2007>

MHSVI#20071110-03:
LHMelt におけるヒープオーバーフローの脆弱性


概要

 LHMelt は, 複数の形式に対応した圧縮・展開等の書庫操作を行うソフトウェアです。 LHMelt にはヒープオーバーフローの脆弱性が存在します。

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

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

詳細情報

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

想定される影響

 LHMelt へ多数の起動パラメーターが渡されることにより, 任意のコードを実行されたり, クラッシュを引き起こされる可能性があります。

 LHMelt は, 本来, 手動で単独使用されるものですが, スクリプト等からコマンド的に使用されるケースが存在するため, そのような使用方法を行っている場合は, サービス運用妨害 (DoS) 攻撃に利用される恐れがあります。

対策方法

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

技術情報

 本脆弱性は, LHMelt の起動時に多数のパラメーターを含むコマンドライン文字列が渡された場合に発生します。 以下の関数にヒープオーバーフローが存在します:


static int setarg(LPCSTR cpCommandBuffer, LPCSTR cpCommandBuffer2, char ***lparg)
{
    ...
    LPCWSTR p;
    int argc, iSize;
    WCHAR **arglst;

    ...
    arglst = malloc(sizeof(LPWSTR) * MY_PARCOUNT);
    argc = 0;

    ...
    while (p != NULL) {
        ...
        arglst[argc] = malloc(iSize * sizeof(WCHAR));
        ...
        argc++;
    }
    ...
    return argc;
}
	  

 上記関数により, 渡されたコマンドライン文字列等が各パラメーターへ分割されますが, 適切なバウンダリチェックを伴わずに argc がインクリメントされているため, パラメーター数が既定の MY_PARCOUNT を超えることでヒープオーバーフローが発生します。

 起動直後であることから, 関数・データーポインターを含んだ有効な領域が殆ど存在していないことと, 実際に書き込まれる (arglst[argc] へ代入される。) 値を直接操作できないことから, exploit 可能条件へ達することは難しいと思われますが, パラメーター数や内容を調整することで条件へ達することが可能であると推測されます。

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