mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-11-11 04:07:21 +03:00
commit
fb2724e635
78
docs/releasenotes/3.1.1.rst
Normal file
78
docs/releasenotes/3.1.1.rst
Normal file
|
@ -0,0 +1,78 @@
|
|||
|
||||
3.1.1
|
||||
=====
|
||||
|
||||
CVE-2016-0740 -- Buffer overflow in TiffDecode.c
|
||||
------------------------------------------------
|
||||
|
||||
Pillow 3.1.0 and earlier when linked against libtiff >= 4.0.0 on x64
|
||||
may overflow a buffer when reading a specially crafted tiff file.
|
||||
|
||||
Specifically, libtiff >= 4.0.0 changed the return type of
|
||||
``TIFFScanlineSize`` from ``int32`` to machine dependent
|
||||
``int32|64``. If the scanline is sized so that it overflows an
|
||||
``int32``, it may be interpreted as a negative number, which will then
|
||||
pass the size check in ``TiffDecode.c`` line 236. To do this, the
|
||||
logical scanline size has to be > 2gb, and for the test file, the
|
||||
allocated buffer size is 64k against a roughly 4gb scan line size. Any
|
||||
image data over 64k is written over the heap, causing a segfault.
|
||||
|
||||
This issue was found by security researcher FourOne.
|
||||
|
||||
|
||||
CVE-2016-0775 -- Buffer overflow in FliDecode.c
|
||||
-----------------------------------------------
|
||||
|
||||
In all versions of Pillow, dating back at least to the last PIL 1.1.7
|
||||
release, FliDecode.c has a buffer overflow error.
|
||||
|
||||
Around line 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;
|
||||
|
||||
|
||||
The memcpy has error where ``x`` is added to the target buffer
|
||||
address. ``X`` is used in several internal temporary variable roles,
|
||||
but can take a value up to the width of the image. ``Im->image[y]``
|
||||
is a set of row pointers to segments of memory that are the size of
|
||||
the row. At the max ``y``, this will write the contents of the line
|
||||
off the end of the memory buffer, causing a segfault.
|
||||
|
||||
This issue was found by Alyssa Besseling at Atlassian
|
||||
|
||||
CVE-2016-TBD -- Buffer overflow in PcdDecode.c
|
||||
----------------------------------------------
|
||||
|
||||
In all versions of Pillow, dating back at least to the last PIL 1.1.7
|
||||
release, ``PcdDecode.c`` has a buffer overflow error.
|
||||
|
||||
The ``state.buffer`` for ``PcdDecode.c`` is allocated based on a 3
|
||||
bytes per pixel sizing, where ``PcdDecode.c`` wrote into the buffer
|
||||
assuming 4 bytes per pixel. This writes 768 bytes beyond the end of
|
||||
the buffer into other Python object storage. In some cases, this
|
||||
causes a segfault, in others an internal Python malloc error.
|
||||
|
||||
Integer overflow in Resample.c
|
||||
------------------------------
|
||||
|
||||
If a large value was passed into the new size for an image, it is
|
||||
possible to overflow an int32 value passed into malloc.
|
||||
|
||||
kk = malloc(xsize * kmax * sizeof(float));
|
||||
...
|
||||
xbounds = malloc(xsize * 2 * sizeof(int));
|
||||
|
||||
``xsize`` is trusted user input. These multiplications can overflow,
|
||||
leading the malloc'd buffer to be undersized. These allocations are
|
||||
followed by a loop that writes out of bounds. This can lead to
|
||||
corruption on the heap of the Python process with attacker controlled
|
||||
float data.
|
||||
|
||||
This issue was found by Ned Williamson.
|
|
@ -6,6 +6,7 @@ Release Notes
|
|||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
3.1.1
|
||||
3.1.0
|
||||
3.0.0
|
||||
2.8.0
|
||||
|
|
Loading…
Reference in New Issue
Block a user