CVE-2025-64183OpenEXR是一个提供EXR文件格式规范和参考实现的开源库,广泛应用于影视行业的高动态范围图像存储。2025年11月披露的安全漏洞存在于OpenEXR的Python绑定模块中,具体位于pyOpenEXR_old.cpp文件里的PyObject_StealAttrString函数。该函数在调用PyObject_GetAttrString获取新引用后,立即对其进行了decref操作并返回指针,导致返回的是悬空指针。攻击者可以通过构造恶意的EXR文件,利用Python API(如PyLong_AsLong/PyFloat_AsDouble)访问这些已释放的内存对象,从而触发use-after-free条件,可能导致程序崩溃或执行任意代码。该漏洞无需认证即可远程利用,对使用OpenEXR处理不受信任图像文件的应用程序构成严重威胁。
漏洞根源在于pyOpenEXR_old.cpp中的PyObject_StealAttrString函数实现错误。该函数本应返回一个借用的引用,但实际上调用PyObject_GetAttrString获取的是新引用(new reference),随后立即调用Py_DECREF释放了这个对象,但函数签名表明它应该返回一个有效的指针。当调用者(如PyLong_AsLong、PyFloat_AsDouble等API)尝试使用这个已释放的内存地址时,就会触发use-after-free漏洞。该函数在多个代码路径中被调用,包括读取PixelType.v、Box2i、V2f等数据结构时。攻击者可以通过创建一个包含特殊构造属性的EXR文件,触发这些代码路径,从而利用此漏洞。由于Python的垃圾回收机制和内存管理策略,攻击者可能有机会在对象被回收后、其他对象被分配前,控制被释放的内存内容,增加代码执行的可能性。