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

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

一、背景介绍

LibTIFF 是一个用来读写标签图像文件格式(简写为TIFF)的库。这个库还包含一些命令行工具用来处理TIFF文件。它以源代码方式分发,并且可以在多种平台上以二进制构建的方式出现。LibTIFF软件由Sam Leffler在Silicon Graphics工作期间编写。

1.1 漏洞描述

在LibTIFF4.0.10版本中,tiffcrop工具的invertImage()函数没有正确处理色彩深度为2和4的情况,导致堆缓冲区溢出。

1.2 受影响的系统版本

LibTIFF4.0.10

二、环境搭建

1.下载源码

https://download.osgeo.org/libtiff/tiff-4.0.10.zip

2.按默认选项编译

三、漏洞分析

tiff-4.0.10/tools/tiffcrop.c文件中,invertImage()函数的代码有几个问题,该函数用于反转bilevel或grayscale类型TIFF图像的明暗值。在第9206行,可以看到一个switch语句用于处理各种色彩深度的情况。

但注意在case 2语句中,由于某些未知原因,在处理bps值2和4的情况时,反转比特位的方法和32,16,8和1不同。这里循环迭代处理4个像素,同时还进行了宽度迭代,最后在移位操作时导致了堆缓冲区溢出。

所以在这里,将所有位反转使用255-x =~x这样的方法更容易,下面是修复方案。

四、漏洞利用

使用libtiff中的tiffcrop工具反转图像色彩空间,导致DoS:

tiffcrop -I data poc.tiff out.tiff

 

 

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