CVE-2026-32741libheif是一款流行的HEIF和AVIF文件格式解码器和编码器。在其1.21.2及以下版本中,发现了一个严重的安全漏洞,该漏洞位于MaskImageCodec::decode_mask_image()函数内,具体表现为堆缓冲区溢出。当攻击者诱导用户解码特制的HEIF文件,且该文件包含掩码图像时,由于程序在复制数据前未对长度进行有效验证,导致拷贝的数据量超过了目标缓冲区的大小。攻击者可以通过精心构造文件内容,控制iloc extent的大小,从而引发堆内存破坏。成功利用此漏洞可能导致受影响的应用程序崩溃(拒绝服务),或在特定条件下执行任意代码。
该漏洞的根源在于libheif处理HEIF文件中掩码图像时的逻辑缺陷。具体来说,在MaskImageCodec::decode_mask_image()函数中,代码调用了memcpy(dst, data.data(), data.size())将iloc extent的数据完整复制到像素缓冲区。其中,复制长度data.size()直接取自文件中的iloc extent字段,该字段完全由攻击者控制;而目标缓冲区的大小则是根据文件中声明的图像维度来分配的。由于代码缺失了对data.size()的上限检查,如果攻击者构造一个满足特定条件的恶意文件(例如:mskC属性指定bits_per_pixel为8,ispe属性声明宽度为偶数且大于等于64),并设置iloc extent的大小超过像素缓冲区的实际容量,就会触发堆缓冲区溢出。此漏洞利用无需修改默认安全限制或外部编解码器插件,具有较高的可利用性。