ImageMagick CVE-2022-44267、CVE-2022-44268漏洞分析
字数 1502 2025-08-24 20:49:22
ImageMagick CVE-2022-44267与CVE-2022-44268漏洞深入分析与防护指南
1. ImageMagick简介与漏洞概述
ImageMagick是一个开源的图像处理套件,支持超过200种图像格式的读写操作,广泛应用于网站用户图片处理场景。
漏洞信息:
- CVE-2022-44267:拒绝服务(DoS)漏洞
- CVE-2022-44268:任意文件读取漏洞
- 影响版本:ImageMagick 7.1.0-49
- 攻击方式:通过上传恶意PNG图像触发
2. CVE-2022-44267拒绝服务漏洞分析
漏洞原理
当ImageMagick解析PNG文件时,若tEXt块的关键字为"profile"且文本字符串为"-",进程将等待标准输入(stdin),导致拒绝服务。
漏洞利用路径
- 上传图片触发ImageMagick命令(如convert)
ReadOnePNGImage(coders/png.c:2164)读取tEXt块SetImageProfile(MagickCore/property.c:4360)处理profile属性- 当检测到profile属性时:
- 4720行:将字符串作为文件名处理
- 4722行:保存文件名
FileToStringInfo(MagickCore/string.c:1005)尝试读取内容FileToBlob(MagickCore/blob.c:1396)遇到"-"文件名时无限等待输入
PoC示例
恶意PNG十六进制数据:
89504E470D0A1A0A0000000D49484452000000010000000108000000003A7E9B550000000B49444154789C63F8FF1F00030001FFFC25DC510000000A7445587470726F66696C65002D00600C56A10000000049454E44AE426082
3. CVE-2022-44268任意文件读取漏洞分析
漏洞原理
当tEXt块的关键字为"profile"时,ImageMagick会将文本字符串解释为文件名并读取其内容,嵌入到生成的图像中。
漏洞利用路径
- 上传恶意图片触发ImageMagick命令
ReadOnePNGImage读取tEXt块SetImageProfile处理profile属性- 当检测到profile属性时:
- 4720行:将字符串作为文件名处理
- 4722行:保存文件名
FileToStringInfo读取文件内容到string_info->datum- 通过
SetImageProperty将文件内容二进制存储到新生成的图片中
PoC示例
读取/etc/passwd的恶意PNG十六进制:
89504E470D0A1A0A0000000D4948445200000001000000010100000000376EF9240000000A49444154789C636800000082008177CD72B6000000147445587470726F66696C65002F6574632F70617373776400B7F46D9C0000000049454E44AE426082
验证方法
- 检查生成的图片中是否包含目标文件(/etc/passwd)的十六进制内容
- 从图片中提取并还原文件内容
4. 漏洞修复方案
官方修复补丁:
https://github.com/ImageMagick/ImageMagick/commit/05673e63c919e61ffa1107804d1138c46547a475
防护措施
- 升级ImageMagick到已修复版本
- 实施输入验证:
- 检查上传图像的tEXt块内容
- 过滤包含"profile"关键字的PNG文件
- 限制ImageMagick的文件系统访问权限
- 在沙箱环境中运行图像处理操作
5. 漏洞影响评估
风险等级:
- CVE-2022-44267:中危(服务中断)
- CVE-2022-44268:高危(敏感信息泄露)
受影响场景:
- 任何使用受影响版本ImageMagick进行图像处理的Web应用
- 特别是允许用户上传图片的Drupal等CMS系统
6. 检测方法
- 检查服务器上运行的ImageMagick版本
- 使用PoC文件测试系统是否易受攻击
- 监控图像处理过程中的异常行为(如长时间等待)
7. 参考资源
- 官方修复提交记录
- 漏洞披露时间线
- 相关安全公告