UNARJ32.DLL は, ARJ 形式に対応した圧縮・展開等の書庫操作を行うライブラリーです。 UNARJ32.DLL には CVE-2006-4338 と同様な無限ループの脆弱性が存在します。
UNARJ32.DLL は, 『統合アーカイバ』の API 仕様に準拠した, ARJ 形式書庫に対する圧縮・展開といった操作を行うためのライブラリーです。 UNARJ32.DLL は主に圧縮・展開等を行うアーカイバーソフトウェアから呼び出される形で使用されますが, 無限ループの脆弱性が含まれており, 細工された書庫ファイルの展開 (を伴う処理) を行うことで, サービス運用妨害 (DoS) 攻撃を受ける可能性があります。
UNARJ32.DLL を利用しているアプリケーションの動作状況により異なりますが, 無限ループによるサービス運用妨害 (DoS) 攻撃を受ける可能性があります。
最新版 (Ver 1.01b 以降) へバージョンアップを行ってください。 [ダウンロード]
本脆弱性は, 巧妙に細工された ARJ 書庫を展開 (内部的に展開処理を含む操作全般。) することで発生します。 以下の関数に無限ループの脆弱性が存在します:
static VOID read_c_len(VOID)
{
short i, c, n;
WORD mask;
n = getbits(CBIT);
if (n == 0) {
...
} else {
i = 0;
while (i < n) {
c = pt_table[bitbuf >> 8];
mask = 1 << 7;
while (c >= NT) {
if (bitbuf & mask) {
c = right[c];
} else {
c = left[c];
}
mask >>= 1;
}
...
}
...
}
}
上記関数により, ハフマン法で使用するコード長の符号表を読み込みますが, 不十分な終了条件 (c >= NT
) によるループが形成されているため, 非常に偏った枝を構成している (連続して c == left[c]
となるような) 符号が読み込まれることで, 無限ループに陥ります。
UNLHA32.DLL とは異なり, CVE-2006-4338 の報告どおり read_pt_len() 関数にも同じ脆弱性が存在します。