安全研究
安全漏洞
Firefly媒体服务器畸形Content-Length字段堆溢出漏洞
发布日期:2008-04-19
更新日期:2008-04-22
受影响系统:
Firefly Media Server < 0.2.4.2不受影响系统:
Firefly Media Server 0.2.4.2描述:
BUGTRAQ ID: 28860
CVE(CAN) ID: CVE-2008-1771
Firefly是Roku SoundBridge和iTunes所使用的开源媒体服务器。
Firefly的src/webserver.c文件的ws_getpostvars()函数中存在堆溢出漏洞,如果远程攻击者向服务区发送了带有负数Content-Length值的POST请求的话就可以触发这个溢出,导致拒绝服务或执行任意指令。
以下是src/webserver.c文件中的漏洞代码:
707 int ws_getpostvars(WS_CONNINFO *pwsc) {
708 char *content_length;
709 unsigned char *buffer;
710 uint32_t length;
711 uint32_t ms;
....
715 content_length = ws_getarg(&pwsc->request_headers,"Content-Length");
....
722 length=atoi(content_length);
723 ws_dprintf(L_WS_DBG,"Thread %d: Post var length: %d\n",
724 pwsc->threadno,length);
725
726 buffer=(unsigned char*)malloc(length+1);
....
739 if(!io_read_timeout(pwsc->hclient, buffer, &length, &ms)) {
....
757
758 if(!ws_getgetvars(pwsc,(char*)buffer)) {
759 /* assume error was set already */
760 free(buffer);
761 ws_dprintf(L_WS_LOG,"Could not parse get vars\n");
762 return FALSE;
763 }
764
765 free(buffer);
这里的相对变量为uint32_t类型的length,在715行content_length指向了用户在HTTP POST请求中所提供的Content-Length值,这个值在722行使用atoi转换为整数。由于长度类型为uint32_t,值-1会将length设置为UINT_MAX,然后使用这个长度值分配堆上空间,在malloc调用添加+ 1就会触发整数溢出。如果Content-Length: -1的话,传送给malloc的(UINT_MAX + 1)缓冲区大小为0,导致malloc分配可能的最小块,但不会失败。
在739行会对缓冲区执行定时的读取,src/io.c的io_read_timeout()函数结束对io_read的调用,将length字节数读到缓冲区,向length写回读字节的计数,因此可能出现堆溢出,导致在765行释放已破坏的缓冲区时服务器崩溃。
<*来源:Nico Golde (nion@debian.org)
链接:http://secunia.com/advisories/29919/
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=476241
http://www.debian.org/security/2008/dsa-1597
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
建议:
厂商补丁:
Debian
------
Debian已经为此发布了一个安全公告(DSA-1597-2)以及相应补丁:
DSA-1597-2:New mt-daapd package fix regression
链接:http://www.debian.org/security/2008/dsa-1597
补丁下载:
Source archives:
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2.dsc
Size/MD5 checksum: 765 6ca72b17e6f40d1a02651e94488dcb49
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2.diff.gz
Size/MD5 checksum: 8995 467b2da8c4fda2ce457d58ecdae50ab7
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376.orig.tar.gz
Size/MD5 checksum: 995301 c427c26e93914290b7cd615835ea333a
alpha architecture (DEC Alpha)
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_alpha.deb
Size/MD5 checksum: 637480 72c53899fba14e24dab492cf5bf1e7b9
amd64 architecture (AMD x86_64 (AMD64))
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_amd64.deb
Size/MD5 checksum: 611854 7a2e898b954d46685da0276e6cc50c15
arm architecture (ARM)
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_arm.deb
Size/MD5 checksum: 593970 e0d68246bba4c79b9bb939c70bb90def
hppa architecture (HP PA RISC)
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_hppa.deb
Size/MD5 checksum: 630644 80c003af6df36becf5c88b12ff3fad94
i386 architecture (Intel ia32)
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_i386.deb
Size/MD5 checksum: 598998 233350989d451e8e5138faaa97c1ffb3
ia64 architecture (Intel ia64)
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_ia64.deb
Size/MD5 checksum: 680220 e4a38946ff00aef9721242974ef90385
mips architecture (MIPS (Big Endian))
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_mips.deb
Size/MD5 checksum: 620342 9574939e71636d91df4a86c8f46c51c1
mipsel architecture (MIPS (Little Endian))
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_mipsel.deb
Size/MD5 checksum: 615384 1dbcb96200006414080402d8d96ec7df
powerpc architecture (PowerPC)
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_powerpc.deb
Size/MD5 checksum: 620380 98d4eef2a6ece485cd519cd82997100c
s390 architecture (IBM S/390)
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_s390.deb
Size/MD5 checksum: 623264 cd1d9cf611212cbeb72347071ec0efa6
sparc architecture (Sun SPARC/UltraSPARC)
http://security.debian.org/pool/updates/main/m/mt-daapd/mt-daapd_0.2.4+r1376-1.1+etch2_sparc.deb
Size/MD5 checksum: 595508 dd4c18f06eaf2c3b45ffe138780c17ec
补丁安装方法:
1. 手工安装补丁包:
首先,使用下面的命令来下载补丁软件:
# wget url (url是补丁下载链接地址)
然后,使用下面的命令来安装补丁:
# dpkg -i file.deb (file是相应的补丁名)
2. 使用apt-get自动安装补丁包:
首先,使用下面的命令更新内部数据库:
# apt-get update
然后,使用下面的命令安装更新软件包:
# apt-get upgrade
Firefly
-------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://sourceforge.net/project/showfiles.php?group_id=98211&package_id=105189&release_id=593465
浏览次数:2961
严重程度:0(网友投票)
绿盟科技给您安全的保障
