漏洞总结:Unchecked Allocation in Enables Memory Exhaustion / DoS #3519 漏洞概述 在 GPAC 的 函数中,存在一个未检查的内存分配漏洞。该函数从文件流中读取 (一个 16 位字段,最大值为 65535),并立即调用 分配内存,而没有首先验证该 box 是否包含足够的字节来容纳这么多条目。 触发条件:构造一个 box,将 设置为 65535(0xFFFF),但实际没有提供对应的引用数据。 后果:GPAC 会尝试分配约 1.5 MB 的内存(65535 × 24 字节),导致内存耗尽或拒绝服务(DoS)。 确认方式:通过 Valgrind 堆分析确认,恶意文件比正常文件多分配了约 1.5 MB 内存。 影响范围 内存放大:172 字节输入 → ~1.5 MB 分配(约 160 倍放大)。 DoS 风险:在受限环境(如嵌入式 IoT 设备、自动转码管道、CDN 节点处理未信任文件)中可能导致服务中断。 并发放大:1000 个并行请求 → ~1.5 GB 瞬时内存分配。 无持久泄漏:错误路径会正确释放指针,风险是瞬时的。 修复方案 在读取 后、调用 前,添加预分配边界检查,与 中的安全模式一致: 原理: 是剩余 box 字节可容纳的最大条目数(每个条目 12 字节)。 修复后行为:恶意文件将被拒绝,输出错误:“Invalid number of references 65535 in sidx”。 POC 代码(生成恶意 MP4 文件) > 运行 生成恶意文件 ,可用 触发漏洞。