关于imagemagick包中图像转换功能convert执行造成堆内存越界问题分析
问题描述
使用imagemagick包中提供的convert来进行某一Magick图像文件格式(MIFF)转换为png图片时,会造成堆内存越界问题.
问题分析
此问题是上游提出的一个安全漏洞,主要现象描述即为上述所说,但是这样并不能让我对其有个直观的问题现象了解;所以我拉取了上游代码,因为上游提到了执行convert功能对给出的测试用例heap-buffer-overflow_WritePNGImage转换为png图片格式时,会造成堆内存越界,故首先先复现一下问题现象;为了更清楚的观测到堆内存越界现象,我在gcc编译时使用了ASAN内存监测工具对其运行的程序进行内存监测:
liuxin@liuxin-PC:~/Desktop/POC/tmp$ git clone https://gitlab.deepin.io/debian-patch/imagemagick.git
正克隆到 'imagemagick'...
remote: Enumerating objects: 3223, done.
remote: Counting objects: 100% (3223/3223), done.
remote: Compressing objects: 100% (1966/1966), done.
remote: Total 3223 (delta 1702), reused 2741 (delta 1220)
接收对象中: 100% (3223/3223), 13.50 MiB | 27.76 MiB/s, 完成.
处理 delta 中: 100% (1702/1702), 完成.
liuxin@liuxin-PC:~/Desktop/POC/tmp$ cd imagemagick/
liuxin@liuxin-PC:~/Desktop/POC/tmp/imagemagick$ ./configure CFLAGS='-fsanitize=address -fno-omit-frame-pointer -g -O2'
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
...
liuxin@liuxin-PC:~/Desktop/POC/tmp/imagemagick$ make -j4
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/liuxin/Desktop/POC/tmp/

本文分析了使用imagemagick包的convert功能转换MIFF图像时出现的堆内存越界问题。通过源码追踪,发现是由于在处理转换为png图片的过程中,缺少对文件长度的判断,导致内存越界。解决方案是在相关函数中增加对文件长度的检查,以防止错误发生。修复后,测试表明问题已得到解决。

3550

被折叠的 条评论
为什么被折叠?



