安全研究

安全漏洞
Amarok audible.cpp Audible文件处理多个整数溢出和内存分配漏洞

发布日期:2009-01-12
更新日期:2009-01-13

受影响系统:
Amarok Amarok < 2.0.1.1
不受影响系统:
Amarok Amarok  2.0.1.1
描述:
BUGTRAQ  ID: 33210
CVE(CAN) ID: CVE-2009-0135,CVE-2009-0136

Amarok是Linux/Unix平台下的音乐播放器。

Amarok在解析畸形的Audible数字音频文件时存在多个整数溢出和未检查的内存分配漏洞,远程攻击者可以利用这些漏洞执行任意代码。

以下是amarok-2.0\src\metadata\audible\audibletag.cpp中有漏洞的代码段:

[...]
140 bool Audible::Tag::readTag( FILE *fp, char **name, char **value)
141 {
142        quint32 nlen;
143 [1]    if ( fread(&nlen, sizeof(nlen), 1, fp) != 1 )
144            return false;
145
146        nlen = ntohl(nlen);
147        //fprintf(stderr, "tagname len=%x\n", (unsigned)nlen);
148 [2]    *name = new char[nlen+1];
149 [4]    (*name)[nlen] = '\0';
150
151        quint32 vlen;
152 [5]    if ( fread(&vlen, sizeof(vlen), 1, fp) != 1 )
153        {
154            delete [] *name;
155            *name = 0;
156            return false;
157        }
158
159        vlen = ntohl(vlen);
160        //fprintf(stderr, "tag len=%x\n", (unsigned)vlen);
161
162 [3]    if ( fread(*name, nlen, 1, fp) != 1 )
163        {
164            delete [] *name;
165            *name = 0;
166            return false;
167        }
168
169 [6]    *value = new char[vlen+1];
170 [8]    (*value)[vlen] = '\0';
171
172 [7]    if ( fread(*value, vlen, 1, fp) != 1 )
173        {
174            delete [] *value;
175            *value = 0;
176            return false;
177        }
178
[...]

可导致堆溢出的整数溢出#1:

[1] 从媒体文件获得用户定义的值并存储在无符int型变量nlen中。
[2] 该行分配了nlen+1字节的堆缓冲区。如果对nlen提供了0xffffffff值,就可以触发整数溢出,导致分配很小的堆缓冲区。
[3] 将用户控制值nlen用作了长度标识符以将媒体文件中用户控制的数据拷贝到name所指向的之前分配的堆缓冲区。由于nlen值很大(0xffffffff),媒体文件中的用户控制数据覆盖了堆缓冲区。

可导致内存破坏的未经检查内存分配漏洞#1:

[2]+[4] 这段代码没有检查新的[]语句所返回的空指针,然后用户控制的nlen值引用了所生成指针并为引用的位置分配了8位值0x00。可利用这个漏洞通过1-字节值0x00覆盖任意内存位置。

可导致堆溢出的整数溢出#2:

[5] 从媒体文件获得用户定义的值并存储在无符int型变量vlen中。
[6] 该行分配了vlen+1字节的堆缓冲区。如果对vlen提供了0xffffffff值,就可以触发整数溢出,导致分配很小的堆缓冲区。  
[7] 将用户控制值vlen用作了长度标识符以将媒体文件中用户控制的数据拷贝到name所指向的之前分配的堆缓冲区。由于vlen值很大(0xffffffff),媒体文件中的用户控制数据覆盖了堆缓冲区。

可导致内存破坏的未经检查内存分配漏洞#2:

[6]+[8] 这段代码没有检查新的[]语句所返回的空指针,然后用户控制的nlen值引用了所生成指针并为引用的位置分配了8位值0x00。可利用这个漏洞通过1-字节值0x00覆盖任意内存位置。

<*来源:Tobias Klein
  
  链接:http://secunia.com/advisories/33505/
        http://marc.info/?l=bugtraq&m=123178762405771&w=2
        http://security.gentoo.org/glsa/glsa-200903-34.xml
*>

建议:
厂商补丁:

Gentoo
------
Gentoo已经为此发布了一个安全公告(GLSA-200903-34)以及相应补丁:
GLSA-200903-34:Amarok: User-assisted execution of arbitrary code
链接:http://security.gentoo.org/glsa/glsa-200903-34.xml

所有Amarok用户都应升级到最新版本:

    # emerge --sync
    # emerge --ask --oneshot --verbose ">=3Dmedia-sound/amarok-1.4.10-r2"=

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

http://amarok.kde.org/de/node/600

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