3.1.1

CVE-2016-0740——tiffdecode.c中的缓冲区溢出

当与X64上的libtiff>4.0.0链接时,Pillow3.1.0及更早版本在读取特制的tiff文件时可能溢出缓冲区。

具体来说,libtiff>=4.0.0更改了 TIFFScanlineSizeint32 依赖于机器 int32|64 . 如果扫描线的大小使其溢出 int32 ,可以将其解释为负数,然后将通过大小签入 TiffDecode.c 第236行。为此,逻辑扫描线大小必须大于2GB,对于测试文件,分配的缓冲区大小为64K,而扫描线大小大约为4GB。超过64K的任何图像数据都会写入堆,从而导致segfault。

这个问题是由安全研究员fourone发现的。

CVE-2016-0775——flidecode.c中的缓冲区溢出

在所有版本的Pillow中,至少可以追溯到上一个PIL 1.1.7版本,flidecode.c有一个缓冲区溢出错误。

192号线附近:

case 16:
    /* COPY chunk */
    for (y = 0; y < state->ysize; y++) {
        UINT8* buf = (UINT8*) im->image[y];
        memcpy(buf+x, data, state->xsize);
        data += state->xsize;
    }
    break;

memcpy有错误 x 添加到目标缓冲区地址。 X 在多个内部临时变量角色中使用,但可以获取最大为图像宽度的值。 Im->image[y] 是一组行指针,指向与行大小相同的内存段。在最大 y ,这会将该行的内容从内存缓冲区的末尾写入,从而导致segfault。

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

CVE-2016-2533——pcddecode.c中的缓冲区溢出

在所有版本的 Pillow 中,至少可以追溯到上一个PIL 1.1.7版本, PcdDecode.c 有缓冲区溢出错误。

这个 state.buffer 对于 PcdDecode.c 根据每像素3字节的大小分配,其中 PcdDecode.c 写入缓冲区,假设每像素4个字节。这会将超过缓冲区末尾的768字节写入其他Python对象存储中。在某些情况下,这会导致segfault,而在其他情况下则会导致内部python malloc错误。

resample.c中的整数溢出

如果一个较大的值被传递到图像的新大小中,则有可能溢出传递到malloc的int32值。

kk=malloc(xsize*kmax*sizeof(float));…xbounds=malloc(xsize*2*sizeof(int));

xsize 是受信任的用户输入。这些乘法可能溢出,导致malloc的缓冲区过小。这些分配后面跟着一个写越界的循环。这可能导致具有攻击者控制的浮点数据的python进程堆损坏。

奈德·威廉姆森发现了这个问题。