• 本文作者: 阿尔法实验室漏洞报送
  • |
  • 2019年4月3日
  • |
  • CVE
  • |

天融信关于LibTiff中PS_Lvl2page函数堆溢出漏洞的分析

一、背景介绍

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

Written by 阿尔法实验室漏洞报送