3.3.2#

map.c中的整数溢出#

3.3.2之前的Pillow在读取精心制作的图像文件时可能会在map.c中遇到整数溢出错误。这可能导致内存泄漏或损坏。

具体来说,当图像中的参数传递到 Image.core.map_buffer ,图像的大小用 xsize * ysize * bytes_per_pixel . 如果结果大于最大大小,则会溢出。这在32位系统上是可能的。

此外,这个 size 向提供的潜在攻击者添加了值 offset 值,并与缓冲区的大小进行比较,而不检查溢出值或负值。

这些值随后被用于创建指针,此时Pillow可以读取内存并将其包含在其他图像中。图像被标记为只读,因此Pillow通常不会在不首先复制图像的情况下写入内存。

这个问题是由CRIS Neckar在分歧安全部门发现的。

在storage.c中签名扩展#

3.3.2和PIL 1.1.7之前的 Pillow (至少)不检查 ImagingNew 在里面 Storage.c . 负图像大小可能导致比预期更小的分配,从而导致任意写入。

这个问题是由CRIS Neckar在分歧安全部门发现的。