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

<公開:Feb.20,2005>

MHSVI#20050220:
UNARJ32.DLL におけるバッファーオーバーフローの脆弱性


概要

 UNARJ32.DLL は, ARJ 形式に対応した圧縮・展開等の書庫操作を行うライブラリーです。 UNARJ32.DLL にはバッファーオーバーフローの脆弱性が存在します。

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

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

詳細情報

 UNARJ32.DLL は, 『統合アーカイバ』の API 仕様に準拠した, ARJ 形式書庫に対する圧縮・展開といった操作を行うためのライブラリーです。 UNARJ32.DLL は主に圧縮・展開等を行うアーカイバーソフトウェアから呼び出される形で使用されますが, バッファーオーバーフローの脆弱性が含まれており, 細工されたレスポンスファイルを読み込むことで, 任意のコードを実行される可能性があります。

想定される影響

 当該アプリケーションを実行しているユーザーの権限で任意のコードを実行される可能性があります。

対策方法

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

回避方法

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

技術情報

 本脆弱性は, 細工されたレスポンスファイルを読み込むことで発生します。 以下の関数にバッファーオーバーフローの脆弱性が存在します:


static char *readresword(HMYFILE file)
{
    char *p;
    int c, bQuote;

    ...
    do {
        if (c == '\"') {
            bQuote = !bQuote;
        } else {
            *p++ = (char)c;
        }
        c = Mygetc(file);
    } while ((!bQuote && c > ' ') ||
        (bQuote && c >= ' '));
    ...
}
	  

 上記関数により, レスポンスファイルから 1 行分のコマンド文字列を読み込みますが, 適切なバウンダリチェックを伴わずに読込を行っているため, 1 行が確保されたバッファー (2048 バイト) を超える長さとなることで, バッファーオーバーフローが発生します。 バッファーはグローバル変数としてデーターセグメント領域に存在しますが, 後方には複数の関数ポインターが存在するため, そのポインターを改竄することで, 任意コードの実行が可能となります。

 当該バッファーと攻撃対象となる関数ポインターの間には他の変数等の領域が存在しますが, 位置関係が一定しているため, 情報の辻褄を合わせることは難しくありません。 従って, exploit 条件へ達するのは比較的簡単と思われます。

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