# N/A
## 概述
GPAC v2.4.0 中 vobsub_get_subpic_duration() 函数存在缓冲区溢出漏洞,攻击者可通过构造恶意数据包触发该漏洞,导致拒绝服务(DoS)。
## 影响版本
GPAC v2.4.0
## 细节
漏洞位于 vobsub_get_subpic_duration() 函数,处理特定数据时未对缓冲区边界进行有效检查,导致缓冲区溢出。
## 影响
攻击者可利用该漏洞使应用程序崩溃,造成拒绝服务(DoS)。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: POC/gpac_vobsub/GPAC_vobsub.md at main · zakkanijia/POC · GitHub -- 🔗来源链接
标签:
神龙速读:
## 关键漏洞信息
### 1. 漏洞概述
- **项目/产品**: GPAC
- **受影响组件**: VobSub demuxer filter (vobsubdmx) / VobSub bitstream parsing (media_tools/vobsub.c)
- **漏洞类型**: 堆越界读取 (Heap Out-of-Bounds Read)
- **触发方式**: 解析特制的VobSub .idx + .sub文件(或单个.idx导致GPAC打开匹配.sub)
- **影响**: 至少导致服务拒绝(崩溃)。由于是OOB读,主要是一个稳定性问题,潜在的信息泄露取决于读取值后续的处理方式(在此未展示)。
- **攻击向量**: 攻击者提供特制的VobSub字幕包,受害者使用GPAC或基于GPAC的应用打开/处理。
### 2. 受影响版本
- **确认易受攻击的版本**: GPAC 2.4.0
### 3. 根因分析
#### 3.1 位置
- **文件**: src/filters/dmx_vobsub.c & src/media_tools/vobsub.c
- **函数**: vobsubdmx_send_stream(...)与vobsub_get_subpic_duration(...)
- **问题代码路径**: 从.sub chunk中读取psize和dsize并传给时长解析器。
#### 3.2 根因详情(对攻击者控制的dsize缺少边界检查)
在vobsubdmx_send_stream中,demuxer从.sub数据流中读取两个16位值:
```c
psize = (buf[0x16] + 0x18] << 8) + buf[buf[0x16] + 0x19];
dsize = (buf[buf[0x16] + 0x1a] << 8) + buf[buf[0x16] + 0x1b];
```
**问题**: psize控制packet的分配大小,dsize是攻击者控制且在调用vobsub_get_subpic_duration(...)前未与psize进行验证。
当dsize >= psize - 1时,vobsub_get_subpic_duration(...)执行越界读操作。
### 4. 漏洞复现
- **PoC文件**: poc_vobsub.idx, poc_vobsub.sub
- **生成PoC命令**: `python3 gpac_idx.py --out poc_vobsub --psize 0x20 --dsize 0x1f`
- **复现命令**: 使用AddressSanitizer构建的GPAC运行。
### 5. 影响评估
- **最小影响**: 打开/处理特制VobSub字幕时服务拒绝(崩溃)。
- **安全风险**: 是OOB读(非写)。主要展示影响是崩溃,是否能转为信息泄露取决于额外的程序行为,在此未演示。
暂无评论