前言
LibTIFF 4.0.9 (with JBIG enabled) decodes arbitrarily-sized JBIG into a buffer, ignoring the buffer size, which leads to a tif_jbig.c JBIGDecode out-of-bounds write.
该cve发生在LibTIFF 4.0.9版本中,由于在解码JBIG的时候没有对size 进行验证,在JBIGDecode函数中会造成大量数据的堆溢出
编译安装
为了复现该漏洞,需要使得LibTIFF 支持jbig解码功能,所以需要先安装libjbig-dev
sudo apt-get install libjbig-dev
然后编译安装LibTIFF 4.0.9,链接在此
./configure --prefix=/xxxx/xxx/build
make && make install
tiff文件格式
TIFF是Tagged Image File Format的缩写 , 标签图像文件格式
TIFF与其他文件格式最大的不同在于除了图像数据,它还可以记录很多图像的其他信息。它记录图像数据的方式也比较灵活, 理论上来说, 任何其他的图像格式都能为TIFF所用, 嵌入到TIFF里面。比如JPEG, Lossless JPEG, JPEG2000和任意数据宽度的原始无压缩数据都可以方便的嵌入到TIFF中去。由于它的可扩展性, TIFF在数字影响、遥感、医学等领域中得到了广泛的应用。TIFF文件的后缀是.tif或者.tiff
Tiff的结构大概是这样的组成:
文件头信息区(IFH)、图像文件目录(IFD)和图像数据区
而IFD又包含了很多DE( Directory Entry )
简单的说,IFD用于存储描述图像的属性信息,如图像的 长、宽、分辨率等 ,DE就是一个个不同属性描述。而图像数据区则直接存储像素信息的二进制数据
这里只做简单介绍,详细可见: