# N/A
## 概述
GPAC v2.4.0 中的 `dmx_saf` 函数存在栈溢出漏洞,攻击者可通过构造恶意的 .saf 文件触发该漏洞,导致拒绝服务(DoS)。
## 影响版本
GPAC v2.4.0
## 细节
`dmx_saf` 函数在处理 .saf 文件时未对输入数据进行充分的边界检查,导致栈溢出。攻击者可利用此漏洞使程序崩溃。
## 影响
攻击者可利用该漏洞造成应用程序崩溃,从而实现拒绝服务攻击。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: POC/gpac_saf/GPAC_SAF.md at main · zakkanijia/POC · GitHub -- 🔗来源链接
标签:
神龙速读:
### 漏洞关键信息
#### 1. 漏洞概述
- **项目**:GPAC
- **受影响组件**:SAF demuxer filter (`dmx_saf`)
- **漏洞类型**:栈缓冲区溢出(越界写)
- **触发条件**:解析包含超过1024个唯一 `stream_id` 值的SAF比特流,并且这些值位于Access Units中
#### 2. 影响版本
- **确认漏洞版本**:GPAC **2.4.0**
#### 3. 根因分析
- **位置**:
- **文件**:`src/filters/dmx_saf.c`
- **函数**:`safdmx_check_dur(...)`
- **问题**:StreamInfo数组 `si[1024]` 未进行边界检查即被`nb_streams`索引。
- **详细原因**:
```c
typedef struct {
u32 stream_id;
u32 ts_res;
} StreamInfo;
StreamInfo si[1024];
u32 nb_streams = 0;
```
#### 4. PoC与复现
- **PoC生成器**:用于生成包含1025个不同`stream_id`值的.saf文件。
- **生成PoC命令**:
```bash
python3 gen_poc_saf_stack_oob.py
```
- **复现命令**:
```bash
UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1 \
ASAN_OPTIONS=abort_on_error=1:detect_leaks=0:symbolize=1:print_stacktrace=1 \
./bin/gcc/gpac -i poc_saf_stack_oob_streaminfo.saf inspect:deep -o null
```
#### 5. 影响评估
- **最小影响**:处理恶意.saf文件时导致服务中断(崩溃)。
- **安全风险**:此漏洞会导致栈越界写,即内存损坏。
#### 6. 修复建议
- 在写入`si[nb_streams]`之前添加上界检查。
- 考虑使用动态尺寸结构(如map/list),设置硬性上限并进行适当验证。
暂无评论