ImageMagick字体家族处理存在高危释放后使用/双重释放漏洞

本文详细披露了ImageMagick库Magick++层中Options::fontFamily方法在处理空字符串时存在的释放后使用和双重释放漏洞。该漏洞源于特定代码逻辑错误,可导致程序崩溃或堆损坏,影响多个版本的Magick.NET NuGet包。

Withdrawn Advisory: ImageMagick has a use-after-free/double-free risk in Options::fontFamily when clearing family · CVE-2025-65955 · GitHub Advisory Database · GitHub

已撤销的公告

此公告已撤销,因为它不影响ImageMagick项目的NuGet包。

原始描述

我们相信我们发现了ImageMagick的Magick++层中存在一个潜在的安全漏洞,该漏洞在Options::fontFamily被传入空字符串调用时显现。

漏洞详情

清除字体家族时,会对_drawInfo->font调用RelinquishMagickMemory,释放了字体字符串,但让_drawInfo->font继续指向已释放的内存,而_drawInfo->family被设置为该(现已无效的)指针。之后任何对_drawInfo->font的清理或重用都会导致对悬空内存的再次释放或解引用。

DestroyDrawInfo和其他设置器(如Options::font, Image::font)假定_drawInfo->font保持有效,因此销毁或后续更新会触发崩溃或堆损坏。

1
2
3
4
5
if (family_.length() == 0)
  {
    _drawInfo->family=(char *) RelinquishMagickMemory(_drawInfo->font);
    DestroyString(RemoveImageOption(imageInfo(),"family"));
  }
  • CWE-416(释放后使用)_drawInfo->font处于悬空状态但仍可通过Options对象访问。
  • CWE-415(双重释放):DrawInfo的拆卸过程会再次释放_drawInfo->font,引发分配器异常。

受影响版本

  • 由提交 6409f34d637a34a1c643632aa849371ec8b3b5a8(“Added fontFamily to the Image class of Magick++",2015-08-01,责任行313)引入。
  • 存在于所有包含该提交的版本中,至少包括ImageMagick 7.0.1-0及更高版本(可能也包括支持Magick++字体家族的较晚6.9版本)。没有fontFamily的旧版本不受影响。

命令行触发可能性

此漏洞无法从命令行界面触发。该错误特定于Magick++ C++ API,特别是Options::fontFamily()方法。命令行工具(如convert、magick等)不会暴露此特定代码路径,因为它们通过不同的内部机制运行,不会以触发释放后使用条件的方式直接调用带有空字符串的Options::fontFamily()

建议修复

1
2
3
4
diff --git a/Magick++/lib/Options.cpp b/Magick++/lib/Options.cpp
@@ void Magick::Options::fontFamily(const std::string &family_)
-      _drawInfo->family=(char *) RelinquishMagickMemory(_drawInfo->font);
+      _drawInfo->family=(char *) RelinquishMagickMemory(_drawInfo->family);

此修改仅释放实际的家族字符串,保持_drawInfo->font不变。在清除font()本身时可选地将_drawInfo->font置空可以维持分配器的整洁性。

参考

时间线

  • dlemstra 发布至 ImageMagick/ImageMagick:2025年12月2日
  • 由国家漏洞数据库发布:2025年12月2日
  • 发布至GitHub公告数据库:2025年12月3日
  • 已审核:2025年12月3日
  • 已撤销:2025年12月11日
  • 最后更新:2025年12月11日

严重性

中等

CVSS总体得分:4.9 / 10

CVSS v3 基础指标

  • 攻击向量:本地
  • 攻击复杂度:高
  • 所需权限:无
  • 用户交互:无
  • 作用域:未改变
  • 机密性影响:低
  • 完整性影响:低
  • 可用性影响:低

CVSS向量字符串:CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L

EPSS 得分

  • 0.016% (第3百分位数)

弱点

  • CWE-415:双重释放 - 产品对同一内存地址两次调用free()

标识符

  • CVE ID:CVE-2025-65955
  • GHSA ID:GHSA-q3hc-j9x5-mp9m

源代码

  • ImageMagick/ImageMagick

致谢

  • 报告者:LuiginoC

此公告已编辑。请查看历史记录。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计