UNARJ32.DLL は, ARJ 形式に対応した圧縮・展開等の書庫操作を行うライブラリーです。 CVE-2006-4337 と同様なヒープオーバーフローの脆弱性が存在します。
UNARJ32.DLL は, 『統合アーカイバ』の API 仕様に準拠した, ARJ 形式書庫に対する圧縮・展開といった操作を行うためのライブラリーです。 UNARJ32.DLL は主に圧縮・展開等を行うアーカイバーソフトウェアから呼び出される形で使用されますが, ヒープオーバーフローの脆弱性が含まれており, 細工された書庫ファイルの展開 (を伴う処理) を行うことで, 任意のコードを実行されたり, サービス運用妨害 (DoS) 攻撃を受ける可能性があります。
UNARJ32.DLL を利用しているアプリケーションの動作状況により異なりますが, 当該アプリケーションを実行しているユーザーの権限で任意のコードを実行されたり, サービス運用妨害 (DoS) 攻撃を受ける可能性があります。
最新版 (Ver 1.01b 以降) へバージョンアップを行ってください。 [ダウンロード]
本脆弱性は, 巧妙に細工された ARJ 書庫を展開 (内部的に展開処理を含む操作全般。) することで発生します。 以下の関数にヒープオーバーフローの脆弱性が存在します:
static VOID make_table(short nchar, LPBYTE bitlen,
short tablebits, LPWORD table)
{
WORD count[17], weight[17], start[18];
LPWORD p;
WORD i, k, len, ch, jutbits, avail, nextcode, mask;
...
for (ch = 0; (short)ch < nchar; ch++) {
...
nextcode = (WORD)(k + weight[len]);
if ((short)len <= tablebits) {
for (i = start[len]; i < nextcode; i++) {
table[i] = ch;
}
} else {
...
}
...
}
}
上記関数により,ハフマン法で使用する符号表を作成しますが, 適切なバウンダリチェックを伴わずに符号表への書き込みを行っているため, 想定した長さ (tablebits) を超える符号が存在することでヒープオーバーフローが発生します。
位置不定の有意な関数ポインターに届くような長さの符号が作成されるエンコードデーターが必要となることと, 実際に書き込まれる値が固定データー (ch) であることから, exploit 条件へ達するのは難しいものと思われます。 クラッシュだけで良いのであれば容易に行えます。