CVE-2026-34379OpenEXR是电影行业广泛使用的EXR图像文件格式规范及参考实现。在3.2.0至3.2.7、3.3.9和3.4.9之前的版本中,存在一处严重的内存错位写入漏洞。该漏洞位于src/lib/OpenEXRCore/internal_dwa_decoder.h文件的LossyDctDecoder_execute()函数中。当解码包含FLOAT类型通道的DWA或DWAB压缩EXR文件时,解码器尝试执行原地的HALF至FLOAT数据转换。在此过程中,代码将一个未对齐的uint8_t *行指针强制转换为float *并直接进行写入操作。由于行缓冲区可能无法保证4字节对齐,这种操作违反了C语言标准,属于未定义行为。在ARM或RISC-V等强制内存对齐的架构上,这将导致程序立即崩溃;而在x86架构上,虽然硬件容忍未对齐访问,但编译器优化可能导致更严重的安全隐患。
该漏洞的核心原理在于指针强制转换导致的内存对齐违规。在LossyDctDecoder_execute函数内部,为了处理压缩图像数据,程序假设行缓冲区的起始地址满足4字节对齐要求(即float类型的对齐要求)。然而,实际情况中缓冲区地址可能仅以单字节对齐。当代码执行*(float*)ptr = value时,若ptr未对齐,在ARM等架构上会触发总线错误或对齐故障,导致拒绝服务。在x86架构上,虽然CPU能处理未对齐访问,但C标准将其定义为未定义行为,这意味着编译器在优化时(如向量化指令)可能假设地址是对齐的,从而导致数据损坏或潜在的代码执行风险。攻击者可以通过构造特制的EXR文件,精心布局DWA压缩数据块,诱导解码器处理特定格式的FLOAT通道,从而触发该逻辑漏洞。利用该漏洞无需用户权限,仅需用户打开恶意文件即可。