CVE-2017-9128复现与分析
字数 1026 2025-08-25 22:58:34
CVE-2017-9128漏洞分析与复现指南
漏洞概述
CVE-2017-9128是libquicktime 1.2.4中的一个堆缓冲区溢出漏洞。该漏洞存在于quicktime_video_width函数中,位于lqt_quicktime.c文件中。攻击者可以通过精心构造的MP4文件导致堆缓冲区越界读取,最终导致应用程序崩溃,实现拒绝服务攻击。
漏洞细节
漏洞函数分析
漏洞函数原型:
int quicktime_video_width(quicktime_t *file, int track)
{
if((track < 0) || (track >= file->total_vtracks))
return 0;
return file->vtracks[track].track->mdia.minf.stbl.stsd.table->width;
}
漏洞触发路径
- 访问
file->vtracks[track].track->mdia.minf.stbl.stsd.table->width时 - 结构体指针
table未被正确初始化 - 导致访问
[rax+0x30]时越界读取(堆块大小只有0x20)
调用栈回溯
#0 quicktime_video_width
#1 quicktime_init_maps
#2 quicktime_read_info
#3 do_open
#4 quicktime_open
#5 qt_init
#6 main
环境准备
所需工具
- libquicktime 1.2.4源码
- POC文件:
libquicktime_1.2.4_quicktime_video_width_heap-buffer-overflow.mp4 - 调试工具:GDB
- 地址消毒剂(AddressSanitizer)
编译安装步骤
- 下载libquicktime-1.2.4源码
- 配置编译环境:
./configure make make install - 如果缺少
lqtplay工具,需要安装相关库:sudo apt-get install apt-file sudo apt-file update apt-file search <缺失的头文件>
漏洞复现
复现步骤
-
使用GDB调试:
gdb lqtplay r libquicktime_1.2.4_quicktime_video_width_heap-buffer-overflow.mp4 -
设置断点:
break quicktime_video_width -
单步执行观察内存访问异常
预期结果
将看到类似以下ASAN报错:
==10979==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000009d00
READ of size 4 at 0x602000009d00 thread T0
#0 quicktime_video_width /src/lqt_quicktime.c:998
#1 quicktime_init_maps /src/lqt_quicktime.c:1633
...
漏洞分析
根本原因
-
文件解析流程中,当检测到非AVI格式文件时:
if(!got_avi) file->file_type = LQT_FILE_NONE; -
导致无法进入AVI处理分支:
if(file->file_type == LQT_FILE_AVI) { quicktime_read_riff(file, &leaf_atom); quicktime_import_avi(file); // 此函数包含table初始化代码 } -
quicktime_import_avi函数未被调用,导致table指针未被初始化
数据结构链
访问路径涉及的数据结构链:
quicktime_s → vtracks[] → quicktime_video_map_t → track → quicktime_trak_t → mdia → quicktime_mdia_t → minf → quicktime_minf_t → stbl → quicktime_stbl_t → stsd → quicktime_stsd_t → table → quicktime_stsd_table_t → width
POC分析
使用010 Editor分析POC文件,可以看到包含以下box结构:
- ftype
- mdat
- movv
但缺少AVI格式的box,导致无法进入正确的解析路径。
修复建议
- 在访问
table->width前应检查table指针是否已初始化 - 添加对非AVI文件的正确处理逻辑
- 更新到修复后的libquicktime版本
参考资料
- POC下载:https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/42148.zip
- CVE详情:CVE-2017-9128
- libquicktime源码:libquicktime-1.2.4