UNLHA32.DLL は, LZH, LZS 形式に対応した圧縮・展開等の書庫操作を行うライブラリーです。 UNLHA32.DLL には CVE-2006-4338 と同様な無限ループの脆弱性が存在します。
UNLHA32.DLL は, 『統合アーカイバ』の API 仕様に準拠した, LZH, LZS 形式書庫に対して圧縮・展開といった操作を行うためのライブラリーです。 UNLHA32.DLL は主に圧縮・展開等を行うアーカイバーソフトウェアから呼び出される形で使用されますが, 無限ループの脆弱性が含まれており, 細工された書庫ファイルの展開 (を伴う処理) を行うことで, サービス運用妨害 (DoS) 攻撃を受ける可能性があります。
UNLHA32.DLL を利用しているアプリケーションの動作状況により異なりますが, 無限ループによるサービス運用妨害 (DoS) 攻撃を受ける可能性があります。
最新版 (Ver 2.52b 以降) へバージョンアップを行ってください。 [ダウンロード]
本脆弱性は, 巧妙に細工された 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]
となるような) 符号が読み込まれることで, 無限ループに陥ります。