3.1.2#

cve-2016-3076——jpeg2kencode.c中的缓冲区溢出#

在写入大型JPEG2000文件时,2.5.0和3.1.1之间的Pillow可能会溢出缓冲区,从而允许代码执行或其他内存损坏 (CVE-2016-3076 )。

这专门发生在函数中 j2k_encode_entry ,在这条线上:

state->buffer = malloc (tile_width * tile_height * components * prec / 8);

此漏洞需要特定的值 height * width 这样的话 height * width * components * precision 溢出,此时malloc的值将小于预期值。分配的缓冲区将 ((height * width * components * precision) mod (2^31) / 8) ,其中组件为1-4,精度为8或16。对于一个标准,通常的值是精度为8的4个分量。 RGBA 图像。

然后解包程序将一个图像拆分为:

RGBARGBARGBA....

进入::

RRR.
GGG.
BBB.
AAA.

如果这个缓冲区比预期的小,jpeg2k解包程序函数将在分配之外写入堆,从而损坏内存。

这个问题是由阿丽莎·贝塞林在亚特兰蒂斯发现的。