CVE-2026-43907OpenImageIO在处理特制的DPX图像文件时存在严重漏洞。在DPXColorConverter.cpp文件的QueryRGBBufferSizeInternal()函数中,由于使用了带符号的32位整数算术进行缓冲区大小计算,当像素数量足够大时会发生整数溢出。这导致计算出的缓冲区大小从负数(表示无需缓冲)变为很小的正数。程序随后据此分配过小的堆缓冲区,但在读取图像数据时写入超出范围的数据,导致堆缓冲区溢出。攻击者可利用此漏洞造成拒绝服务或潜在的任意代码执行。
该漏洞的核心在于OpenImageIO的DPXColorConverter.cpp中的QueryRGBBufferSizeInternal()函数。该函数使用32位有符号整数计算缓冲区大小,对特定描述符(如kCbYCr)使用了负数乘数(例如pixels * -3 * bytes)。设计上,负结果被解释为不需要单独缓冲区的信号。然而,当输入的DPX文件包含极大的像素计数时,乘法运算会导致整数溢出,结果从INT_MIN回绕为一个很小的正整数。随后,dpxinput.cpp中的调用者误将这个小正整数作为实际的缓冲区大小需求,并通过m_decodebuf.resize()分配了不足的堆内存。接着,程序使用fread将完整的图像数据写入这个微小的缓冲区,引发堆缓冲区溢出。这种堆破坏可以被攻击者利用,导致应用程序崩溃或通过精心构造的Payload实现任意代码执行。