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在分歧安全部门发现的。
讨论区