2.5.0和3.1.1之间的缓冲区在写入大型JPEG2000文件时可能溢出缓冲区,从而导致代码执行或其他内存损坏。
这在函数中特别发生 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解包程序函数将在分配之外写入堆,从而损坏内存。
这个问题是由阿丽莎·贝塞林在亚特兰蒂斯发现的。