[EEYEB-20051031] Apple QuickTime Malformed GIF Heap Overflow

"Advisories" <[email protected]> Wed, 11 Jan 2006 09:40:04 -0800
Newsgroups gmane.comp.security.full-disclosure,gmane.comp.security.ntbugtraq,gmane.comp.security.bugtraq
Message-ID <D52FCFAE57472647956CBAEDC08DA5537344DC@av-mail01.corp.int-eeye.com>
EEYEB-20051031 Apple QuickTime Malformed GIF Heap Overflow

Release Date:
January 10, 2006

Date Reported:
October 31, 2005

Severity:
High (Code Execution)

Patch Development Time (In Days):
71 Days

Severity:
High (Code Execution)

Vendor:
Apple


Systems Affected:
Quicktime on Windows 2000
Quicktime on Windows XP
Quicktime on Mac OS X 10.3.9

Apple iTunes on Windows 2000
Apple iTunes on Windows XP
Apple iTunes on OS X 10.3.9


Overview:
eEye Digital Security has discovered a critical heap overflow in the =
Apple Quicktime player that allows for the execution of arbitrary code =
via a maliciously crafted GIF file.

This flaw has proven to allow for reliable control of data on the heap =
chunk and can be exploited via a web site by using ActiveX controls.

Technical Details:
When Quicktime processes the Netscape Navigator Application Extension =
Block of a gif file, it does not perform proper bounds checking, so it =
will allocate memory without checking the heap size. The heap can be =
overwritten in the Picture Modifier block. =20
The block size calculate code such as:
.text:66A339CC                 mov     ax, [esi+0Ch]
.text:66A339D0                 xor     ecx, ecx
.text:66A339D2                 mov     [esp+34h+var_28], ecx
.text:66A339D6                 mov     [esp+34h+var_24], ecx
.text:66A339DA                 mov     [esp+34h+var_20], ecx
.text:66A339DE                 mov     [esp+34h+var_1C], ecx
.text:66A339E2                 mov     word ptr [esp+34h+var_10], cx
.text:66A339E7                 mov     [esp+34h+arg_4], eax
.text:66A339EB                 movsx   eax, ax
.text:66A339EE                 mov     word ptr [esp+34h+var_10+2], cx
.text:66A339F3                 mov     cx, [esi+8]
.text:66A339F7                 movsx   edx, cx
.text:66A339FA                 sub     eax, edx
.text:66A339FC                 movsx   edx, word ptr [esi+6]
.text:66A33A00                 add     eax, 3Eh
.text:66A33A03                 push    edi
.text:66A33A04                 movsx   edi, word ptr [esi+0Ah]
.text:66A33A08                 sar     eax, 3
.text:66A33A0B                 lea     ebx, [esi+6]
.text:66A33A0E                 and     eax, 0FFFFFFFCh
.text:66A33A11                 sub     edi, edx
.text:66A33A13                 movsx   edx, ax
.text:66A33A16                 mov     [esi+4], ax
.text:66A33A1A                 imul    edi, edx

The allocate code is :
.text:66A33A68                 push    edi
.text:66A33A69                 call    sub_668B5B30


But when it real process data to this memory, it use real decode data to =
write this memory=20
but didn=A1=AFt check this heap size. This is segment of the write code =
function(sub_66AE0A70):
.text:66AE0B18                 movsx   edx, word ptr [edi+12h] ; default
.text:66AE0B1C                 imul    edx, [edi+0Ch]
.text:66AE0B20                 mov     ecx, [edi+4]
.text:66AE0B23                 inc     word ptr [edi+16h]
.text:66AE0B27                 mov     eax, [esp+arg_0]
.text:66AE0B2B                 add     edx, ecx
.text:66AE0B2D                 mov     [eax], edx
.text:66AE0B2F                 mov     eax, [ebp+10h]
.text:66AE0B32                 test    eax, eax
.text:66AE0B34                 jz      short loc_66AE0B62
.text:66AE0B36                 mov     ax, [ebp+1Ch]
.text:66AE0B3A                 mov     edx, [ebp+0Ch]
.text:66AE0B3D                 movzx   cx, ah
.text:66AE0B41                 mov     ch, al
.text:66AE0B43                 mov     [edx], cx
.text:66AE0B46                 movsx   eax, word ptr [edi+12h]
.text:66AE0B4A                 imul    eax, [ebp+14h]
.text:66AE0B4E                 add     eax, [ebp+10h]
.text:66AE0B51                 mov     cx, [ebp+18h]
.text:66AE0B55                 mov     [ebp+0Ch], eax
.text:66AE0B58                 mov     [ebp+1Ah], cx
.text:66AE0B5C                 mov     word ptr [ebp+1Ch], 0




Vendor Status:
Apple has released a patch for this vulnerability. The patch is =
available via the Updates section of the affected applications.
This vulnerability has been assigned the CVE identifier CVE-2005-2340.

Credit:
Fang Xing

Greetings:
eEye Research and especially Hugo for all his help

Copyright (c) 1998-2006 eEye Digital Security
Permission is hereby granted for the redistribution of this alert =
electronically.  It is not to be edited in any way without express =
consent of eEye.  If you wish to reprint the whole or any part of this =
alert in any other medium excluding electronic medium, please email =
[email protected] for permission.

Disclaimer
The information within this paper may change without notice.  Use of =
this information constitutes acceptance for use in an AS IS condition.  =
There are no warranties, implied or express, with regard to this =
information.  In no event shall the author be liable for any direct or =
indirect damages whatsoever arising out of or in connection with the use =
or spread of this information.  Any use of this information is at the =
user's own risk.
_______________________________________________
Full-Disclosure - We believe in it.
Charter: http://lists.grok.org.uk/full-disclosure-charter.html
Hosted and sponsored by Secunia - http://secunia.com/