IPBUF安全漏洞报告
English
CVE-2026-33165 CVSS 5.5 中危

CVE-2026-33165 libde265堆越界写入漏洞

披露日期: 2026-03-20

漏洞信息

漏洞编号
CVE-2026-33165
漏洞类型
堆越界写入
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
libde265

相关标签

Heap Overflowlibde265HEVCCode ExecutionCWE-787

漏洞概述

libde265是一款开源的H.265视频编解码器。在1.0.17版本之前,存在一个堆越界写入漏洞。该漏洞由精心构造的HEVC比特流触发,具体原因是SPS变化后,尽管图像宽高不变但Log2CtbSizeY变化,导致ctb_info.log2unitSize数据过期。这使得set_SliceHeaderIndex在访问数组时越界,并在堆分配末尾写入2字节。攻击者可利用此漏洞导致应用程序崩溃或潜在的代码执行。

技术细节

该漏洞源于libde265在处理HEVC视频流时的状态管理逻辑缺陷。具体而言,当解码器解析视频流并遭遇SPS(序列参数集)变更事件时,系统理应重新初始化相关的图像参数。然而,代码未能及时更新ctb_info结构体内的log2unitSize字段。漏洞触发的特定条件是:当PicWidthInCtbsY和PicHeightInCtbsY保持不变,但Log2CtbSizeY发生变化时,旧的log2unitSize值被错误地保留。随后,在调用set_SliceHeaderIndex函数进行索引设置时,程序利用这个过期的值计算索引,导致越界。最终,程序在堆分配区域的末尾向后写入2字节数据,可能破坏堆结构或导致代码执行。

攻击链分析

STEP 1
步骤1:构造恶意文件
攻击者创建一个特制的HEVC视频文件,其中包含特定的SPS(序列参数集)序列,旨在触发Log2CtbSizeY变化而PicWidthInCtbsY保持不变的逻辑漏洞。
STEP 2
步骤2:诱导用户打开
攻击者通过邮件、网页或其他渠道诱导受害者使用集成了漏洞版本libde265的应用程序打开该恶意视频文件。
STEP 3
步骤3:解码处理
应用程序调用libde265库对视频流进行解码。当解析到恶意的SPS变更时,库未能正确更新内部状态ctb_info.log2unitSize。
STEP 4
步骤4:触发越界写入
在后续处理切片头时,set_SliceHeaderIndex函数使用过期的log2unitSize值计算索引,导致在堆分配的图像元数据数组末尾向后写入2字节数据。
STEP 5
步骤5:执行攻击后果
堆破坏导致应用程序崩溃(拒绝服务),或在特定内存布局下允许攻击者覆盖关键数据指针,实现任意代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import struct def generate_poc(filename): """ PoC for CVE-2026-33165. Generates a crafted HEVC bitstream that triggers the out-of-bounds write. The trigger is a stale ctb_info.log2unitSize after an SPS change. """ with open(filename, 'wb') as f: # HEVC NAL Unit Start Code start_code = b'\x00\x00\x00\x01' # NAL Header for SPS (Type 33) # We need to construct two SPS units with specific properties. # SPS 1: Log2CtbSizeY = 6, Width/Height in CTBs = 1 (e.g., 64x64 image) # SPS 2: Log2CtbSizeY = 5, Width/Height in CTBs = 1 (e.g., 32x32 image but reported as 1x1 CTB) # Note: This is a simplified structural representation. # A functional PoC requires precise bit-level construction of the RBSP. # Write First SPS (Trigger setup) f.write(start_code) f.write(struct.pack('>B', 0x40 | 33)) # NAL Header # ... SPS RBSP data would go here ... # Write Second SPS (The Change) f.write(start_code) f.write(struct.pack('>B', 0x40 | 33)) # NAL Header # ... Malformed SPS RBSP data changing Log2CtbSizeY while keeping PicWidthInCtbsY constant ... # Write Slice Header to trigger set_SliceHeaderIndex f.write(start_code) f.write(struct.pack('>B', 0x40 | 1)) # Slice Header NAL print(f"PoC file generated: {filename}") print("Decoding this file with libde265 < 1.0.17 may cause a crash.") if __name__ == "__main__": generate_poc("cve_2026_33165.hevc")

影响范围

libde265 < 1.0.17

防御指南

临时缓解措施
建议用户尽快将libde265库升级至1.0.17或更高版本以修复此漏洞。如果暂时无法升级,应避免打开来源不明的HEVC视频文件,或者使用应用程序沙箱来限制解码进程的权限,从而减少潜在的代码执行风险。

参考链接

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