安全研究

安全漏洞
FFmpeg 4xm文件解析内存破坏漏洞

发布日期:2009-01-28
更新日期:2009-02-17

受影响系统:
FFmpeg FFmpeg < revision 16846
描述:
BUGTRAQ  ID: 33502
CVE(CAN) ID: CVE-2009-0385

FFmpeg是一套对音频和视频进行解码录制转换的完整方案。

Fmpeg在解析畸形的4X电影文件时存在类型转换漏洞,以下是libavformat/4xm.c文件中的有漏洞代码段:

[..]
93 static int fourxm_read_header(AVFormatContext *s,
94                               AVFormatParameters *ap)
95 {
..
103 [8]  int current_track = -1;
..
106 [9]  fourxm->track_count = 0;
107 [10] fourxm->tracks = NULL;
..
160      } else if (fourcc_tag == strk_TAG) {
161          /* check that there is enough data */
162          if (size != strk_SIZE) {
163              av_free(header);
164              return AVERROR_INVALIDDATA;
165          }
166 [1]      current_track = AV_RL32(&header[i + 8]);
167 [2]      if (current_track + 1 > fourxm->track_count) {
168             fourxm->track_count = current_track + 1;
169             if((unsigned)fourxm->track_count >= UINT_MAX /
                           sizeof(AudioTrack))
170               return -1;
171 [3]         fourxm->tracks = av_realloc(fourxm->tracks,
172                 fourxm->track_count * sizeof(AudioTrack));
173             if (!fourxm->tracks) {
174               av_free(header);
175               return AVERROR(ENOMEM);
176             }
177         }
178 [4] fourxm->tracks[current_track].adpcm = AV_RL32(&header[i + 12]);
179 [5] fourxm->tracks[current_track].channels = AV_RL32(&header[i + 36]);
180 [6] fourxm->tracks[current_track].sample_rate = AV_RL32(&header[i+40]);
181 [7] fourxm->tracks[current_track].bits = AV_RL32(&header[i + 44]);
[..]

[1] 使用来自媒体文件的用户提供数据填充有符型int变量current_track(见[8])
[2] 这个语句检查current_track值是否大于fourxm->track_count。用0初始化了fourxm->track_count变量(见[9]),对current_track提供大于等于0x80000000的值就会导致current_track为负数。如果current_track为负数,if语句总会返回false,无法到达[3]处的缓冲区分配。
[4] 由于用NULL初始化了fourxm->tracks(见[10])且无法到达171行,这导致可利用的空指针引用。可以向NULL + current_track内存位置写入4个字节的用户控制数据。由于current_track值也是用户可控的,还可以向很大的内存地址范围写入4字节的任意数据。
[5] 同[4]
[6] 同[4]
[7] 同[4]

<*来源:Tobias Klein
  
  链接:http://secunia.com/advisories/33711/
        http://marc.info/?l=bugtraq&m=123318367825152&w=2
*>

建议:
厂商补丁:

FFmpeg
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://svn.ffmpeg.org/ffmpeg?view=rev&revision=16846

浏览次数:2625
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障