Title : Adobe Reader 10.1.4 JP2KLib&CoolType WriteAV Vulnerability Version : 10.1.4.38 Date : 2012-11-20 Vendor : http://www.adobe.com/ Impact : Med/High Contact : coolkaveh [at] rocketmail.com Twitter : @coolkaveh tested : XP SP3 ENG Author : coolkaveh ================================================================================ Thanks to @Binjo and others for all support and help ================================================================================ Details: ================================================================================ The parsing routine is really complicated :D Write AV by some kind of not properly initialized array But the parameters of memmove, the counter And destiny pointer seems controllable with data from flatedecoded data. The wierd thing is the stream encoded with flatedecode can't decode properly via zlib.decompress, but Adobe seems decode it correctly, The esi points to a 0x10 length buffer, which contains word or dword calculated from decoded data, after some integrity checks, it'll reach the memove. .text:08088FCE mov eax, esi ; jumptable 08087D44 case 8 .text:08088FD0 lea ecx, [ebp+64h+var_1E0] .text:08088FD6 sub eax, ecx .text:08088FD8 and eax, 0FFFFFFFCh .text:08088FDB cmp eax, 10h .text:08088FDE jl loc_8088496 ; jumptable 08087D2D cases 0,2 .text:08088FE4 push 4 .text:08088FE6 pop eax .text:08088FE7 sub esi, eax .text:08088FE9 movsx edi, word ptr [esi+2] ; ff6b -> ffffff6b .text:08088FED sub esi, eax .text:08088FEF movsx ecx, word ptr [esi+2] ; 0 .text:08088FF3 sub esi, eax .text:08088FF5 movsx edx, word ptr [esi+2] ; 0 .text:08088FF9 sub esi, eax .text:08088FFB mov eax, [ebx+358h] .text:08089001 mov [ebp+64h+var_68], edx .text:08089004 movsx edx, word ptr [esi+2] ; 0 .text:08089008 mov [ebp+64h+var_88], ecx .text:0808900B mov [ebp+64h+var_98], edx ; index [...] .text:0808906A cmp edx, 3 ; var_98, can't great than 3 .text:0808906D ja loc_8087D00 ; jumptable 08087D7F case 2 .text:08089073 test ecx, ecx .text:08089075 jl loc_8087D00 ; jumptable 08087D7F case 2 .text:0808907B add ecx, edi .text:0808907D cmp ecx, [ebx+360h] .text:08089083 jg loc_8087D00 ; jumptable 08087D7F case 2 .text:08089089 mov ecx, [ebp+64h+var_68] .text:0808908C test ecx, ecx .text:0808908E jl loc_8087D00 ; jumptable 08087D7F case 2 .text:08089094 add ecx, edi .text:08089096 cmp ecx, [ebx+edx*8+38Ch] .text:0808909D jg loc_8087D00 ; jumptable 08087D7F case 2 .text:080890A3 mov ecx, edi .text:080890A5 shl ecx, 2 .text:080890A8 push ecx ; size_t .text:080890A9 mov ecx, [ebp+64h+var_88] .text:080890AC lea eax, [eax+ecx*4] .text:080890AF mov ecx, [ebp+64h+var_68] .text:080890B2 push eax ; void * .text:080890B3 mov eax, [ebp+64h+var_98] .text:080890B6 mov eax, [ebx+eax*8+390h] ; ebx+390h seems a array pointer .text:080890BD .text:080890BD loc_80890BD: ; CODE XREF: sub_80875AE+1A1B .text:080890BD lea eax, [eax+ecx*4] .text:080890C0 push eax ; void * .text:080890C1 call ds:memmove Here, ecx points to a buffer, which contains data the routine used to parse. .text:0808B103 cmp eax, 0FEh .text:0808B108 jg short loc_808B12A .text:0808B10A movzx edx, byte ptr [ecx] ; byte ptr [ecx] = 0x29 .text:0808B10D add eax, 0FFFFFF05h .text:0808B112 shl eax, 8 .text:0808B115 inc ecx .text:0808B116 mov [ebp+64h+var_78], ecx .text:0808B119 push 0FFFFFF94h .text:0808B11B or eax, edx .text:0808B11D pop ecx .text:0808B11E sub ecx, eax .text:0808B120 shl ecx, 10h .text:0808B123 mov [esi], ecx ; ecx = ff6b .text:0808B125 jmp loc_80889B5 This issue needs more investigation , so Stay in touch ============================================================================================ first memory corruption @ CoolType MSVCR90!memmove ============================================================================================ (d44.c10): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=02644c14 ebx=02643008 ecx=3fffff6b edx=00000000 esi=02644e68 edi=00000000 eip=7855b36a esp=0012d4d8 ebp=0012d4e0 iopl=0 nv up ei pl nz na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206 C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.4148_x-ww_d495ac4e\MSVCR90.dll - MSVCR90!memmove+0x5a: 7855b36a f3a5 rep movs dword ptr es:[edi],dword ptr [esi] Exception Sub-Type: Write Access Violation Stack Trace: MSVCR90!memmove+0x5a CoolType!CTInit+0x34db9 CoolType+0x14cae Instruction Address: 0x000000007855b36a Short Description: WriteAV ============================================================================================ Second memory corruption @ JP2KLib JP2KLib!CIEParamsAreDefaults ============================================================================================ (d0.6a8): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax=028a56f0 ebx=018126e4 ecx=00000000 edx=00000000 esi=0196893c edi=00000004 eip=022ea797 esp=022ada98 ebp=022adb1c iopl=0 nv up ei pl nz ac po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010212 *** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Program Files\Adobe\Reader 11.0\Reader\JP2KLib.dll - JP2KLib!CIEParamsAreDefaults+0x871: 022ea797 89411c mov dword ptr [ecx+1Ch],eax ds:0023:0000001c=???????? JP2KLib!CIEParamsAreDefaults+0x871: 022ea797 89411c mov dword ptr [ecx+1Ch],eax ds:0023:0000001c=???????? Exception Sub-Type: Write Access Violation Stack Trace: JP2KLib!CIEParamsAreDefaults+0x871 JP2KLib!CIEParamsAreDefaults+0x2091 JP2KLib!JP2KCopyRect+0x6fef MSVCR90!malloc+0x79 AcroRd32!CTJPEGRotateOptions::operator=+0x2268 AcroRd32!AVAcroALM_Destroy+0x84a64 MSVCR90!malloc+0x79 AcroRd32!CTJPEGRotateOptions::operator=+0x29e7 AcroRd32!AVAcroALM_Destroy+0x13886 AcroRd32!AVAcroALM_Destroy+0x7394a AcroRd32!AVAcroALM_Destroy+0x73ff2 MSVCR90!memcmp+0x1717 AcroRd32!AVAcroALM_Destroy+0x51cbd AcroRd32!AVAcroALM_Destroy+0x537e8 AcroRd32!AVAcroALM_Destroy+0x1a3a AcroRd32!AVAcroALM_Destroy+0x9304b Instruction Address: 0x00000000022ea797 Short Description: WriteAV ============================================================================================ Proof of concept : CoolType http://www36.zippyshare.com/v/25032778/file.html JP2KLib http://www7.zippyshare.com/v/22655486/file.html