サイトマップ
株式会社フォティーンフォティ技術研究所
  COMPANY PRODUCTS SERVICES RESEARCH RECRUIT CONTACT
Released Advisories [FFRRA-20070905] 7-ZIP32.DLL におけるバッファオーバーフローの脆弱性

■ 報告日:
2007年7月30日

■ 公開日:
2007年9月5日

■ ソフトウエア名:
7-ZIP32.DLL (汎用ライブラリ)

■ 影響を受けるバージョン:
バージョン4.42.00.03およびそれ以前

■ Upcoming Advisory 番号:
FFRUA-20070730

■ 概要:
フォティーンフォティ技術研究所リサーチチームは、汎用のファイル圧縮展開ライブラリ「7-ZIP32.DLL」にヒープオーバーフロー脆弱性を発見しました。このライブラリを利用するファイル圧縮展開ツールにて細工されたZIPファイルを展開すると、圧縮ファイル中に記述された任意のコードがユーザーの許可無しに実行される可能性があります。

■ 詳細:
本脆弱性は、ZIPファイル中に長いファイル名が存在していた場合に発生します。以下、0x0a00バイト長のファイル名がZIPファイルに含まれていた場合の例を示します。

ファイルが正常に展開ができなかった際、その旨を示すエラーメッセージが作成され、以下のルーチンが呼び出されます。

.text:0400A186 ; int __stdcall sub_400A186(void *)
.text:0400A186 sub_400A186 proc near
.text:0400A186
.text:0400A186
.text:0400A186 arg_0 = dword ptr 0Ch
.text:0400A186
.text:0400A186 push esi
.text:0400A187 push edi
.text:0400A188 push [esp+arg_0]
.text:0400A18C mov esi, ecx
.text:0400A18E call strlen


ecxレジスタは上位関数でセットされるエラーメッセージ文字列のポインタです。ファイルに長い文字列が含まれる場合、以下のようなエラーメッセージ文字列がセットされます。
"can not open output file AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...."

.text:0400A193 pop ecx
.text:0400A194 mov edi, eax
.text:0400A196 mov eax, [esi+4]
.text:0400A199 mov ecx, edi
.text:0400A19B add ecx, [esi+8]
.text:0400A19E cmp eax, ecx
.text:0400A1A0 ja short loc_400A1B9

[esi+4]には0x1000、[esi+8]には0xa7が入っています。このため、0x0400A1A0のja命令直前でeaxは0x1000、ecxは0xa0bfとなります。ja命令では当然分岐せず、以下に続きます。

.text:0400A1A2 add eax, 1000h
.text:0400A1A7 push 2 ; uFlags
.text:0400A1A9 push eax ; dwBytes
.text:0400A1AA mov [esi+4], eax
.text:0400A1AD push dword ptr [esi+0Ch] ; hMem
.text:0400A1B0 call ds:GlobalReAlloc
.text:0400A1B6 mov [esi+0Ch], eax

ここでは、eaxに0x1000を足し、それをサイズとしてGlobalReAlloc()しています。よって、0x2000バイトのメモリが確保されます。そして、以下により確保されたメモリに先ほどのエラーメッセージをコピーします。

.text:0400A1B9
.text:0400A1B9 loc_400A1B9:
.text:0400A1B9 lea eax, [edi+1]
.text:0400A1BC push eax ; size_t
.text:0400A1BD mov eax, [esi+0Ch]
.text:0400A1C0 push [esp+4+arg_0] ; void *
.text:0400A1C4 add eax, [esi+8]
.text:0400A1C7 push eax ; void *
.text:0400A1C8 call memcpy

確保されたメモリエリアは0x2000バイトであるにもかかわらず、memcpy()によりコピーされるサイズはedi+1、すなわち、strlen()で得られたエラーメッセージ長となります。このため、0x2000バイトよりも長いエラーメッセージを生成する、すなわち、長いファイル名が含まれるエラーメッセージを生成することにより、ヒープオーバーフローが発生します。


■ 深刻度:


■ 対象OS:
Microsoft Windows

■ 脆弱性情報の取り扱い:
本脆弱性は、情報処理推進機構(IPA)の「情報セキュリティ早期警戒パートナーシップガイド」に従って処理されました。
http://www.ipa.go.jp/security/vuln/

■ 対策:
ベンダーからリリースされている最新バージョン4.42.00.04をインストールしてください。
http://akky.cjb.net/

■ 関連情報:
http://jvn.jp/jp/JVN%2362868899/
http://www.ipa.go.jp/security/vuln/documents/2007/JVN_62868899.html
http://www.st.ryukoku.ac.jp/~kjm/security/memo/2007/09.html#20070905_7-ZIP

■ 発見者
鵜飼裕司

■ より詳細な情報:

FFR Prime Analysisサービスでは、

- 本脆弱性のより詳細な分析
- 攻撃案定性分析
- パッチ差分解析
など、より詳細な情報を提供しています。

http://www.fourteenforty.jp/services/index.htm
株式会社フォティーンフォティ技術研究所  
プライバシーポリシー サイトのご利用条件 このページの上へ