CVE-2016-8332
TALOS-2016-0193
影响版本OpenJpeg openjp2 2.1.1
漏洞描述最近思科的Talos安全团队披露了JPEG 2000的一个零日漏洞,该漏洞可以执行任意代码。OpenJPEG是一个开源的JPEG 2000解码器,而这个编码器是由C语言所编写。JPEG 2000常被用于解码交流系统中的PDF文档,比如PdFium, Poppler和MuPDF这些软件。现在,黑客可以通过邮件传输带有恶意payload的PDF文件或者JPEG 2000格式的图像来感染目标系统。甚至,黑客可以将恶意文件传输到公网资源内,让受害者下载,比如google drive,drop box等等的。
漏洞细节漏洞主要位于src/lib/openjp2/j2k.c文件中的opj_j2k_read_mcc_record函数。这个文件是负责解析MCC记录的。
如果一个MCC被解析,那么接下来一个l_mcc_recprd 数组就会寻找一个合适的index进行迭代。如果没有找到index,那么就会执行下面的代码。
在第一个if语句中,如果没有找到index,并且l_tcp-> m_nb_max_mcc_records中的记录为最大值(才开始的最大值为10),那么就会继续增加最大值,并且重新分配内存,以便容下更多的记录。
如果MCC的记录为0,那样就永远跳出不这个循环,会一直停留在一个index上,达到一个无效的越界读写记录。如下面这个Valgrind输出为例子。