安全研究

安全漏洞
Asterisk SIP请求远程缓冲区溢出漏洞

发布日期:2003-09-04
更新日期:2003-09-09

受影响系统:
Asterisk Asterisk 0.4
Asterisk Asterisk 0.3
Asterisk Asterisk 0.2
Asterisk Asterisk 0.1.9-1
Asterisk Asterisk 0.1.9
Asterisk Asterisk 0.1.8
Asterisk Asterisk 0.1.7
描述:
BUGTRAQ  ID: 8546

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

Asterisk没有对SIP MESSAGE和INFO请求缺少充分的缓冲区边界检查,远程攻击者可以利用这个漏洞以Asterisk进程权限在系统上执行任意指令。

SIP是会话初始协议,用于建立,修改和终止会话的应用层信号控制协议。@stake发现如果构建一个特殊大小的SIP请求(MESSAGE和INFO请求)发送给Asterisk系统,可导致发生缓冲区溢出,问题代码如下:

  -------[chan_sip.c fragment start]------
  static int get_msg_text(char *buf, int len, struct sip_request *req)
  {
   int x;
   strcpy(buf, "");
   for (x=0;x<req->lines;x++) {
    strncat(buf, req->line[x], len - strlen(buf) - 5);
    strcat(buf, "\n");
   }
   return 0;
  }
  -------[chan_sip.c fragment end]------

因此,当接收到实体数据为1024字节的特殊请求时,内部缓冲区就会被覆盖。由于Asterisk服务以ROOT用户运行,精心构建提交数据可能以ROOT权限在系统上执行任意指令。

虽然SIP支持验证,但MESSAGE和INFO请求的处理不需要任何验证,这允许任意用户利用这个漏洞发送SIP消息进行攻击。

<*来源:@stake
  
  链接:http://www.atstake.com/research/advisories/2003/a090403-1.txt
*>

建议:
厂商补丁:

Asterisk
--------
CVS as of August 15, 2003已经修补这个漏洞:

http://www.asterisk.org/

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