CVE-2025-65955ImageMagick 是一款免费开源的图像处理软件,广泛用于图像编辑、格式转换和图像处理等场景。该软件在政府机构、企业和个人的图像处理工作流中被大量采用。
本次发现的漏洞存在于 ImageMagick 的 Magick++ 层中,当调用 Options::fontFamily 方法并传入空字符串时,会触发内存管理错误。具体而言,传入空字符串会触发 RelinquishMagickMemory 函数释放 _drawInfo->font 指向的内存,但同时 _drawInfo->family 仍保留指向该已释放内存的指针。这导致后续对 _drawInfo->font 的任何操作都可能引发双重释放或访问已释放内存的情况。
攻击者可通过构造恶意图像文件或精心设计的输入,触发此漏洞导致应用程序崩溃(拒绝服务),在某些情况下还可能导致堆损坏和潜在的代码执行风险。由于该漏洞影响图像处理的核心组件,攻击面广泛,任何使用 ImageMagick 处理用户提交图像的应用都可能受到影响。
漏洞根源在于 Magick++ 层的字体处理逻辑中内存管理不当。具体技术细节如下:
1. **触发条件**:当调用 Options::fontFamily 并传入空字符串时,代码进入异常处理分支。
2. **内存释放**:RelinquishMagickMemory(_drawInfo->font) 被调用,释放了字体字符串占用的堆内存。
3. **指针悬挂**:释放后,_drawInfo->family 被设置为指向已释放内存的指针,而 _drawInfo->font 现在成为悬挂指针。
4. **后续操作触发崩溃**:DestroyDrawInfo() 函数在清理 _drawInfo->font 时,会尝试再次释放已释放内存。Image::font 和 Options::font 等 setter 函数同样假设 _drawInfo->font 仍然有效,触发时会导致堆损坏或程序崩溃。
5. **利用方式**:攻击者可以构造一个包含特殊字体设置的图像文件(如 SVG、WMF 等支持嵌入字体的格式),当 ImageMagick 处理该文件时,解析字体设置时触发空字符串路径,导致漏洞利用。