一、背景介绍
LibTIFF 是一个用来读写标签图像文件格式(简写为TIFF)的库。这个库还包含一些命令行工具用来处理TIFF文件。它以源代码方式分发,并且可以在多种平台上以二进制构建的方式出现。LibTIFF软件由Sam Leffler在Silicon Graphics工作期间编写。
1.1 漏洞描述
在LibTIFF4.0.10版本中,tiffps工具的中PS_Lvl2page()函数在将TIFF格式图片转换为Adobe PostScript 3时,由于没有充分考虑byte_count变量可能的值而导致堆缓冲区溢出。
1.2 受影响的系统版本
LibTIFF4.0.10
二、环境搭建
1.下载源码
https://download.osgeo.org/libtiff/tiff-4.0.10.zip
2.按默认选项编译
三、漏洞分析
tiff-4.0.10/tools/tiffps.c文件的PS_Lvl2page ()函数中,对于带有alpha通道的TIFF图像,需要在白色背景下使用遮罩,所以要反转每个像素,其源码如下:
在第2267行的for循环语句中,通常情况下测试i < byte_count是正常的,因为byte_count可以被samplesperpixel整除。但如果不是这种情况,则可能在2268行产生溢出。 要修复该问题,在for循环中应该使用(i + ncomps)< byte_count来代替i < byte_count,如下所示:
四、漏洞利用
使用libtiff中的tiffcrop工具反转图像色彩空间,导致DoS:
./tiff2ps -3 poc.tiff