CVE-2026-42144CImg是一个流行的C++图像处理库。在commit 4ca26bc之前的版本中,该库存在一个整数溢出漏洞,影响PNM、PGM及PPM图像文件的解析。漏洞发生在`_load_pnm()`函数内部的尺寸计算逻辑中,具体涉及图像宽度、高度和深度的乘积运算(W*H*D)。攻击者可以构造包含恶意维度数值的特制图像文件,导致计算结果发生整数回绕,从而绕过内存分配的防护机制。这使得程序仅分配极小的缓冲区,却尝试写入远超缓冲区大小的数据,进而引发堆缓冲区溢出。任何使用CImg库处理不可信图像文件的应用程序均受此漏洞影响,可能导致应用程序崩溃或潜在的代码执行。
该漏洞的根本原因在于CImg库在计算图像数据所需内存大小时,未能正确处理整数边界条件。在`_load_pnm()`函数中,程序读取图像头部的宽(W)、高(H)和深(D)参数,并计算`W*H*D`以确定`malloc`分配的大小。由于使用的数据类型(通常是32位有符号整数)有最大值限制,当输入的维度值极大时,乘积会超过该限制并发生溢出,回绕成一个非预期的小整数(甚至为零)。例如,若计算结果溢出,程序可能只分配几个字节的空间。然而,后续的文件读取循环仍然依据原始的巨大维度值进行数据拷贝。这种分配大小与实际写入大小的不匹配,导致堆内存结构被破坏(Heap Buffer Overflow)。虽然攻击向量被标记为本地(AV:L)且需要用户交互(UI:R),但一旦用户打开恶意文件,即可触发漏洞,造成高可用性影响(A:H)。