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(网友投票)