Adobe Reader Remote Heap Memory Corruption - Subroutine Pointer Overwrite
Adobe Reader Remote Heap Memory Corruption - Subroutine Pointer Overwrite
by Piotr Bania <bania.piotr@xxxxxxxxx>
http://www.piotrbania.com
Orginal url: http://www.piotrbania.com/all/adv/adobe-acrobat-adv.txt
Severity: Critical - Possible remote code execution.
CVE ID: CVE-2006-5857
Time line: 03/09/2006 - Advisory sent to ADOBE PSIRT
03/09/2006 - Initial Vendor Response
11/09/2006 - Vendor confirms the vulnerability.
09/01/2007 - Security Bulletin ready, advisory
released.
Software affected: Adobe Reader 7.0.8 and earlier - all platforms.
Tested on:
* Adobe Reader 7.0.8 and 7.0.3 (Windows)
* Adobe Reader 7.0.8 on (LINUX )
I. BACKGROUND
Adobe Reader is the most popular program for viewing documents in
Adobe Portable Document Format (PDF). More information at:
http://www.adobe.com/products/acrobat/.
II. DESCRIPTION
The problem exists when the Adobe product is trying to render
a specially crafted PDF file.
Take a look a this code snipet:
----// SNIP SNIP //-------------------------------------------------
0:000> u 08009d3f
CoolType+0x9d3f:
08009d3f 83e904 sub ecx,0x4
08009d42 890da07a1d08 mov [CoolType!CTCleanup+0xb393b 081d7aa0)],ecx
08009d48 ffb49070feffff push dword ptr [eax+edx*4-0x190]
08009d4f 8b09 mov ecx,[ecx]
08009d51 51 push ecx
08009d52 ff506c call dword ptr [eax+0x6c] ; (*)
08009d55 59 pop ecx
08009d56 59 pop ecx
----// SNIP SNIP //-------------------------------------------------
Instruction at 0x08009d52 call the location which address is stored at
[eax+0x6c]. Value of the eax points somewhere inside the allocated
heap memory block, as shown here:
----// SNIP SNIP //-------------------------------------------------
...
K: 199 -> [*] HeapAlloc(0x3E0000,0x0,0x4(4))=0x16F6FF8 end at: 0x16F6FFC
K: 200 -> [*] HeapAlloc(0x3E0000,0x0,0x4F4(1268))=0x16F6958 end at:
0x16F6E4C
K: 201 -> [*] HeapAlloc(0x3E0000,0x0,0xFE30(65072))=0x16F6E58 end at:
0x1706C88
K: 202 -> [*] HeapAlloc(0x3E0000,0x0,0x304(772))=0x1706C90 end at: 0x1706F94
K: 203 -> [*] HeapAlloc(0x3E0000,0x0,0xFE24(65060))=0x1706FA0 end at:
0x1716DC4 <- THIS ONE
----// SNIP SNIP //-------------------------------------------------
[EAX+0x6c] points to 0x222C offset from begining of the last heap memory
block.
When specially badly created PDF file is being render, there exist a
possibility to cause a memory corruption, which leads to the overwrite
of the subroutine address stored at [eax+0x6c].
Here's the debugger snipet, after calling overwritten [eax+0x6c] (note
the heap base block is different then previously mentioned, its just
another independent session):
----// SNIP SNIP //-------------------------------------------------
(25a0.2170): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=016f4320 ebx=00000000 ecx=baadf00d edx=00000069 esi=016f4ab9
edi=016f14b4 eip=baadf00d esp=0012deec ebp=0012df80 iopl=0
nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000
efl=00010202
*** ERROR: Symbol file could not be found. Defaulted to export symbols
for C:\Program Files\Adobe\Acrobat 7.0\Reader\CoolType.dll -
baadf00d ?? ???
----// SNIP SNIP //-------------------------------------------------
The attacker can control EIP register, this may lead to a potencial code
exection in context of current user.
III. IMPACT
Successful exploitation may allow the attacker to run arbitrary code in
context of user running Adobe Reader.
IV. VENDOR RESPONSE
All pathes are available, via auto-update or
http://www.adobe.com/go/getreader/
V. POC CODE
Due to severity of this vulnerability i will not disclose any POC codes.
best regards,
pb
--
--------------------------------------------------------------------
Piotr Bania - <bania.piotr@xxxxxxxxx> - 0xCD, 0x19
Fingerprint: 413E 51C7 912E 3D4E A62A BFA4 1FF6 689F BE43 AC33
http://www.piotrbania.com - Key ID: 0xBE43AC33
--------------------------------------------------------------------
- "The more I learn about men, the more I love dogs."