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

<公開:Sep.25,2006 最終更新:Oct.14,2006>

MHSVI#20060925-03:
LMLzh32.DLL における無限ループの脆弱性

 このページは『gzip における脆弱性の影響について』で記述されている内容を LMLzh32.DLL の脆弱性情報として再構成したものです。


概要

 LMLzh32.DLL は, LZH, LZS 形式に対応した圧縮・展開等の書庫操作を行うライブラリーです。 LMLzh32.DLL には CVE-2006-4338 と同様な無限ループの脆弱性が存在します。

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

  • LMLzh32.DLL Ver 0.08.0.1 及びそれ以前
  • 上記が付属している LHMelt Ver 1.52.0.5 及びそれ以前

詳細情報

 LMLzh32.DLL は, LHMelt に付属している, LZH 形式書庫に対して圧縮・展開といった操作を行うためのライブラリーです。 LMLzh32.DLL は LHMelt から呼び出される形で使用されますが, 無限ループの脆弱性が含まれており, 細工された書庫ファイルの展開 (を伴う処理) を行うことで, 無限ループによる操作不能状態に陥る可能性があります。

想定される影響

 呼び出し時点での LHMelt の動作状況にもよりますが, 無限ループによる操作不能状態に陥る可能性があります。

対策方法

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

技術情報

 本脆弱性は, 巧妙に細工された LZH 書庫を展開 (内部的に展開処理を含む操作全般。) することで発生します。 以下の関数に無限ループの脆弱性が存在します:


void read_c_len(void)
{
    short i, c, n;

    n = getbits(CBIT);
    if (n == 0) {
        ...
    } else {
        WORD mask;

        i = 0;
        do {
            mask = 1U << (8 - 1);
            c = g_Decode_HufSHuf_pwPosTable[bitbuf >> (16 - 8)];
            while (c >= NT) {
                if (bitbuf & mask) {
                    c = g_DeEncode_HufSHuf_pwRight[c];
                } else {
                    c = g_DeEncode_HufSHuf_pwLeft[c];
                }
                mask >>= 1;
            }
            ...
        } while (i < n);
        ...
    }
}
	  

 上記関数により, ハフマン法で使用するコード長の符号表を読み込みますが, 不十分な終了条件 (c >= NT) によるループが形成されているため, 非常に偏った枝を構成している (連続して c == g_DeEncode_HufSHuf_pwLeft[c] となるような) 符号が読み込まれることで, 無限ループに陥ります。

更新履歴

  • 脆弱性情報の公開 [Sep.25,2006]
  • 修正版公開に伴う対策情報の更新 [Oct.14,2006]

参考情報

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