CVE-2026-43905OpenImageIO在处理JPEG2000图像时存在堆溢出漏洞。由于在计算缓冲区大小时使用了有符号32位算术,当图像尺寸过大导致计算结果超过INT_MAX时,会发生整数回绕。这导致程序分配了过小的内存缓冲区,随后的像素写入操作会覆盖堆内存,可能导致任意代码执行或程序崩溃。该漏洞需要用户交互触发。
该漏洞位于OpenImageIO的jpeg2000input.cpp文件第395行。漏洞根源在于使用`const int bufsize = w * h * ch * buffer_bpp`计算所需缓冲区大小,变量类型为有符号32位整数。当图像的宽度、高度、通道数和每像素位数的乘积超过2^31-1(INT_MAX)时,算术溢出导致结果回绕为极小值或0。随后调用`m_buf.resize()`仅分配了极小的内存空间。然而,后续的像素写入循环仍基于原始图像尺寸进行操作,导致大量数据写入越界,引发堆溢出。攻击者可诱导用户打开特制的恶意JPEG2000文件(需启用USE_OPENJPH编译选项)触发此漏洞。