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),导致拒绝服务。

漏洞利用路径

  1. 上传图片触发ImageMagick命令(如convert)
  2. ReadOnePNGImage (coders/png.c:2164)读取tEXt块
  3. SetImageProfile (MagickCore/property.c:4360)处理profile属性
  4. 当检测到profile属性时:
    • 4720行:将字符串作为文件名处理
    • 4722行:保存文件名
  5. FileToStringInfo (MagickCore/string.c:1005)尝试读取内容
  6. FileToBlob (MagickCore/blob.c:1396)遇到"-"文件名时无限等待输入

PoC示例

恶意PNG十六进制数据:

89504E470D0A1A0A0000000D49484452000000010000000108000000003A7E9B550000000B49444154789C63F8FF1F00030001FFFC25DC510000000A7445587470726F66696C65002D00600C56A10000000049454E44AE426082

3. CVE-2022-44268任意文件读取漏洞分析

漏洞原理

当tEXt块的关键字为"profile"时,ImageMagick会将文本字符串解释为文件名并读取其内容,嵌入到生成的图像中。

漏洞利用路径

  1. 上传恶意图片触发ImageMagick命令
  2. ReadOnePNGImage读取tEXt块
  3. SetImageProfile处理profile属性
  4. 当检测到profile属性时:
    • 4720行:将字符串作为文件名处理
    • 4722行:保存文件名
  5. FileToStringInfo读取文件内容到string_info->datum
  6. 通过SetImageProperty将文件内容二进制存储到新生成的图片中

PoC示例

读取/etc/passwd的恶意PNG十六进制:

89504E470D0A1A0A0000000D4948445200000001000000010100000000376EF9240000000A49444154789C636800000082008177CD72B6000000147445587470726F66696C65002F6574632F70617373776400B7F46D9C0000000049454E44AE426082

验证方法

  1. 检查生成的图片中是否包含目标文件(/etc/passwd)的十六进制内容
  2. 从图片中提取并还原文件内容

4. 漏洞修复方案

官方修复补丁:
https://github.com/ImageMagick/ImageMagick/commit/05673e63c919e61ffa1107804d1138c46547a475

防护措施

  1. 升级ImageMagick到已修复版本
  2. 实施输入验证:
    • 检查上传图像的tEXt块内容
    • 过滤包含"profile"关键字的PNG文件
  3. 限制ImageMagick的文件系统访问权限
  4. 在沙箱环境中运行图像处理操作

5. 漏洞影响评估

风险等级

  • CVE-2022-44267:中危(服务中断)
  • CVE-2022-44268:高危(敏感信息泄露)

受影响场景

  • 任何使用受影响版本ImageMagick进行图像处理的Web应用
  • 特别是允许用户上传图片的Drupal等CMS系统

6. 检测方法

  1. 检查服务器上运行的ImageMagick版本
  2. 使用PoC文件测试系统是否易受攻击
  3. 监控图像处理过程中的异常行为(如长时间等待)

7. 参考资源

  1. 官方修复提交记录
  2. 漏洞披露时间线
  3. 相关安全公告
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十六进制数据: 3. CVE-2022-44268任意文件读取漏洞分析 漏洞原理 当tEXt块的关键字为"profile"时,ImageMagick会将文本字符串解释为文件名并读取其内容,嵌入到生成的图像中。 漏洞利用路径 上传恶意图片触发ImageMagick命令 ReadOnePNGImage 读取tEXt块 SetImageProfile 处理profile属性 当检测到profile属性时: 4720行:将字符串作为文件名处理 4722行:保存文件名 FileToStringInfo 读取文件内容到string_ info->datum 通过 SetImageProperty 将文件内容二进制存储到新生成的图片中 PoC示例 读取/etc/passwd的恶意PNG十六进制: 验证方法 检查生成的图片中是否包含目标文件(/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. 参考资源 官方修复提交记录 漏洞披露时间线 相关安全公告