关于imagemagick包中图像转换功能convert执行造成堆内存越界问题分析

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

关于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/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值