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)的值。
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
<a href=“http://downloads.digium.com/pub/telephony/asterisk” target=“_blank”>http://downloads.digium.com/pub/telephony/asterisk</a>
<a href=“http://www.asterisknow.org/” target=“_blank”>http://www.asterisknow.org/</a>
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