# Exploit Title: Oracle Java lookupByteBI function heap buffer overflow # Google Dork: # Date: 2013-09-03 # Exploit Author: GuHe # Vendor Homepage: http://www.oracle.com/ # Software Link: http://www.oracle.com/technetwork/java/javase/downloads/index.html # Version: 7u21 and eariler # Tested on: Windows 7 # CVE : CVE-2013-2470       CVE-2013-2470 - Java_sun_awt_image_ImagingLib_lookupByteBI heap buffer overflow       1. Affected Software JRE 7 update 21 and earlier JRE 6 update 45 and earlier       2. Root cause analysis    The "Java_sun_awt_image_ImagingLib_lookupByteBI" performs byte lookup operation on two BufferedImage.    In the following code:     /* Mlib needs 16bit lookuptable and must be signed! */    if (src->type == MLIB_SHORT) {         unsigned short *sdataP = (unsigned short *) src->data;         unsigned short *sP;         if (dst->type == MLIB_BYTE) {             unsigned char *cdataP  = (unsigned char *)  dst->data;             unsigned char *cP;             if (nbands > 1) {                 retStatus = 0;             }             else {                 int x, y;                 for (y=0; y < src->height; y++) {                     cP = cdataP;                     sP = sdataP;                     for (x=0; x < src->width; x++) {                         *cP++ = table[0][*sP++];                     }                        /*                      * 4554571: increment pointers using the scanline stride                      * in pixel units (not byte units)                      */                    cdataP += dstImageP->raster.scanlineStride;                     sdataP += srcImageP->raster.scanlineStride;                 }             }         }         /* How about ddata == null? */    }    It tries to map data in src raster to the dst raster. The total bytes written to dst rater buffer is: (src->width) * (src->height). However, it does not correctly check the size of the dst buffer, if the size of the dst buffer is smaller than (src->width) * (src->height), it will be overflowed.       3. Poc See "TestByteBI.java" for the source code. And you can test the poc by directly open the "HelloApplet.html" in a web browser.       4. Tested on JRE 7 update 21 on Windows 7 Enterprise