安全攻防
morning
CVE-2026-100229 GStreamer H.266 DCI 越界写复现分析
摘要
解析 H.266 码流时,DCI 里那个 4 bit 的 num_ptls_minus1 只要填成保留值 15,GStreamer 1.28.8 就会在结构体末尾之外写入最多 1026 字节;官方描述里也写明标准管线走不到这段代码,所以至今没有补丁。 一、漏洞说明 1、漏洞本身 出问题的是 gst-plugins-bad 里的 libgstcodecparsers ,具体函数 gst_h266_p...
dci
nalu
num_ptls_minus1
gst
266
DCI
bit
NAL
READ_UINT8
error
2026-11-12
1 阅读
约9分钟阅读
先知社区
字号:
解析 H.266 码流时,DCI 里那个 4 bit 的 num_ptls_minus1 只要填成保留值 15,GStreamer 1.28.8 就会在结构体末尾之外写入最多 1026 字节;官方描述里也写明标准管线走不到这段代码,所以至今没有补丁。 一、漏洞说明 1、漏洞本身 出问题的是 gst-plugins-bad 里的 libgstcodecparsers ,具体函数 gst_h266_parser_parse_dci() 。它解析 H.266 的 DCI(解码能力信息,NAL 类型 13)时,先读 4 bit 的 num_ptls_minus1 ,再按这个值循环解析同样数量的 profile_tier_level 结构。字段只有 4 bit,合法取值 0–14,15 是保留值,代码却把上限校验写成 15。保留值被放行后,循环多跑一次,第 16 个元素写到数组末尾之外。 函数定义在 subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/gsth266parser.c:4774 上游源码 gsth266parser.c#L4774 GstH266ParserResult gst_h266_parser_parse_dci (GstH266Parser * parser, GstH266NalUnit * nalu, GstH266DCI * dci) // 解析 DCI,NAL 类型 13 { NalReader nr; guint8 dci_reserved_zero_4bits; guint i; GST_LOG ("parsing Decoding Capability Information"); // 仅日志 nal_reader_init (&nr, nalu->data + nalu->offset + nalu->header_bytes, nalu->size - nalu->header_bytes); // 读指针跳过 NAL 头 memset (dci, 0, sizeof (*dci)); // 调用方结构体先清零 READ_UINT8 (&nr, dci_reserved_zero_4bits, 4); // u(4) 保留位,读完即丢 READ_UINT8 (&nr, dci->num_ptls_minus1, 4); // u(4) PTL 数减一,合法 0..14 CHECK_ALLOWED_MAX (dci->num_ptls_minus1, 15); // 上限错写成 15,保留值 15 被放行 for (i = 0; i <= dci->num_ptls_minus1; i++) { // i 可取到 15,数组下标只到 14 if (!gst_h266_parse_profile_tier_level (&dci->profile_tier_level[i], &nr, 1, 0)) // 第 16 个元素落在数组之外 goto error; } READ_UINT8 (&nr, dci->extension_flag, 1); // u(1) 扩展标志 if (dci->extension_flag) GST_WARNING ("extension_flag not supported. Ignoring extension data."); return GST_H266_PARSER_OK; error: GST_WARNING ("error parsing \"Decoding Capability Information\""); return GST_H266_PARSER_ERROR; } 编号 CVE-2026-100229,类型是越界写,CWE-787。CVSS 3.1 为 6.5 Medium,向量 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L ,2026-10-14 披露。原始描述与评分见 NVD ,编号记录见 CVE 记录 。 按 NVD 的向量,攻击者不需要认证,也不需要用户交互,只要能交给目标程序一段 H.266 数据。真正决定风险大小的,是程序有没有直接调用这个解析 API。 2、受影响的版本与修复状态 截至 2026-11-11,没有任何已发布的修复版本。各发行版状态取自 Debian 安全跟踪页 。 发行版 版本 状态 bookworm 1.22.0-4+deb12u7 vulnerable bookworm (security) 1.22.0-4+deb12u8 vulnerable trixie / trixie (security) 1.26.2-3+deb13u3 vulnerable forky 1.28.8-1 vulnerable sid 1.28.9-1 vulnerable source — unfixed 同一个编号在 Ubuntu 、 SUSE 、 Red Hat Bugzilla 2541471 、 GHSA-8g53-2c85-3xhf 、 ENISA EUVD 都有条目,都没有已发布的修复版本:Ubuntu 各发行版一律停在 Needs evaluation ;SUSE 把 SLE 16.0 / 16.1、openSUSE Leap 16.0 / 16.1 标为 Affected ,15 SP7 及更早标为 Not affected ;Bugzilla 状态是 NEW ,GHSA 与 EUVD 只给出 6.5 Medium 的描述与评分,没有 patched 版本。 头文件里 GstH266DCI 标着 Since: 1.26 , profile_tier_level 数组容量是 15;1.22 源码包里的 gsth266parser.c 还没有 parse_dci ,所以 1.22 的老包只是按整包标记受影响,属于包级粗判,真正带缺陷代码的是 1.26 及以后。实验用的 1.28.8 比 sid 的 1.28.9-1 早一个小版本,缺陷同样存在,源码包从 GStreamer 发布目录 取。 二、影响组件与攻击面 1、组件定位 codecparsers 是 gst-plugins-bad 里的一套纯 C 码流语法解析库,负责把 H.264、H.265、H.266、AV1 的码流读成结构体,不处理容器也不解码。使用它的是链接这个库的程序,媒体分析工具、转码与转封装服务、内容审核系统、取证平台、自研播放内核都有可能是调用方。 和插件型漏洞不同,这里的攻击面不在管线元素,而在被直接调用的公开 API 上。受影响的是自己写了 NAL 遍历逻辑、把外部数据送进 parse_dci 的程序。 2、攻击面 攻击面取决于谁会处理不可信的 H.266 数据。可能把外部数据喂进 codecparsers 的场景有这么几类。 前提是这些程序把 NAL 逐个遍历并调用 parse_dci 。只调 gst_h266_parser_parse_nal() 、或者走标准管线的,不受影响。 3、触发条件 一个 NAL、一次调用就够
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱