### 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-01:
LMLzh32.DLL におけるリターンアドレス改竄の脆弱性

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


概要

 LMLzh32.DLL は, LZH, LZS 形式に対応した圧縮・展開等の書庫操作を行うライブラリーです。 LMLzh32.DLL には CVE-2006-4335 と同様のリターンアドレス改竄の脆弱性が存在します。

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

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

詳細情報

 LMLzh32.DLL は, LHMelt に付属している, LZH 形式書庫に対して圧縮・展開といった操作を行うためのライブラリーです。 LMLzh32.DLL は LHMelt から呼び出される形で使用されますが, リターンアドレス改竄の脆弱性が含まれており, 細工された書庫ファイルの展開 (を伴う処理) を行うことで, 任意のコードを実行されたり, サービス運用妨害 (DoS) 攻撃を受ける可能性があります。

想定される影響

 呼び出し時点での LHMelt の動作状況にもよりますが, 当該アプリケーションを実行しているユーザーの権限で任意のコードを実行されたり, サービス運用妨害 (DoS) 攻撃を受ける可能性があります。

対策方法

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

技術情報

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


void make_table(short nchar, char bitlen[],
                short tablebits, WORD table[])
{
    WORD count[17];  /* コード長ごとの出現個数 */
    ...
    UINT i, k, len, ch, jutbits, avail, nextcode, mask;

    ...
    /* 出現回数を数える */
    for (i = 0; i < (UINT)nchar; i++) {
        count[bitlen[i]]++;
    }
    ...
}
	  

 上記関数により,ハフマン法で使用する符号表を作成しますが, 適切なバウンダリチェックを伴わずにコード長の出現回数の数え上げを行っているため, 16 ビットを超える符号が存在することで配列領域に対してのバッファーオーバーフローが発生します。 配列はローカル変数としてスタック上に確保されており, ほぼ直後の領域には当該関数から復帰するためのリターンアドレスが格納されていることから, そのリターンアドレスの改竄が可能となります。

 リターンアドレスを有意に改竄するためには, 各コード長の出現頻度が結果として (たとえば DWORD の) 意味のある数値となるようなエンコードデーターの作成が必要となるため, exploit 条件へ達するのは難しいものと思われます。 クラッシュのみで良いのであれば容易に行えます。

更新履歴

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

参考情報

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