### 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-02:
UNLHA32.DLL におけるヒープオーバーフローの脆弱性

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


概要

 UNLHA32.DLL は, LZH, LZS 形式に対応した圧縮・展開等の書庫操作を行うライブラリーです。 UNLHA32.DLL には CVE-2006-4337 と同様のヒープオーバーフローの脆弱性が存在します。

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

  • UNLHA32.DLL Ver 2.51.2.9 及びそれ以前
  • 上記を利用しているアプリケーション

詳細情報

 UNLHA32.DLL は, 『統合アーカイバ』の API 仕様に準拠した, LZH, LZS 形式書庫に対して圧縮・展開といった操作を行うためのライブラリーです。 UNLHA32.DLL は主に圧縮・展開等を行うアーカイバーソフトウェアから呼び出される形で使用されますが, ヒープオーバーフローの脆弱性が含まれており, 細工された書庫ファイルの展開 (を伴う処理) を行うことで, 任意のコードを実行されたり, サービス運用妨害 (DoS) 攻撃を受ける可能性があります。

想定される影響

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

対策方法

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

回避方法

  • アプリケーション側で UNLHA32.DLL の使用有無等を行える場合は, UNLHA32.DLL を使用しない, 別の DLL や代替方法を選択する, といった設定を行うことで回避を行うことが可能です。

技術情報

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


void make_table(short nchar, char bitlen[],
                short tablebits, WORD table[])
{
    ...
    WORD weight[17]; /* 0x10000ul >> bitlen */
    WORD start[18];  /* その bitlen の最初のコード(左詰め) */
    WORD *p;
    UINT i, k, len, ch, jutbits, avail, nextcode, mask;

    ...
    for (ch = 0; ch < (UINT)nchar; ch++) {
        ...
        nextcode = start[len] + weight[len];
        if (len <= (UINT)tablebits) {
            /* table に納まるコード */
            for (i = start[len]; i < nextcode; i++) {
                table[i] = (WORD)ch;
            }
        } else {
            ...
        }
        ...
    }
}
	  

 上記関数により,ハフマン法で使用する符号表を作成しますが, 適切なバウンダリチェックを伴わずに符号表への書き込みを行っているため, 想定した長さ (tablebits) を超える符号が存在することでヒープオーバーフローが発生します。

 位置不定の有意な関数ポインターに届くような長さの符号が作成されるエンコードデーターが必要となることと, 実際に書き込まれる値が固定データー (ch) であることから, exploit 条件へ達するのは難しいものと思われます。 クラッシュだけで良いのであれば容易に行えます。

更新履歴

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

参考情報

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