安全研究

安全漏洞
SIPp call.cpp文件多个远程栈溢出漏洞

发布日期:2008-05-02
更新日期:2008-05-07

受影响系统:
SIPp SIPp 3.1
描述:
BUGTRAQ  ID: 29064
CVE(CAN) ID: CVE-2008-2085

SIPp是免费的开源SIP协议测试工具和通讯生成器。

SIPp在处理畸形请求数据时存在漏洞,远程攻击者可能利用此漏洞控制服务器。

SIPp的call.cpp文件中的get_remote_ip_media()和get_remote_ipv6_media()函数中存在栈溢出漏洞:

    122 uint32_t get_remote_ip_media(char *msg)
    123 {
    124     char pattern[] = "c=IN IP4 ";
    125     char *begin, *end;
    126     char ip[32];
    127     begin = strstr(msg, pattern);
    128     if (!begin) {
    129       /* Can't find what we're looking at -> return no address */
    130       return INADDR_NONE;
    131     }
    132     begin += sizeof("c=IN IP4 ") - 1;
    133     end = strstr(begin, "\r\n");
    134     if (!end)
    135       return INADDR_NONE;
    136     memset(ip, 0, 32);
    137     strncpy(ip, begin, end - begin);
    138     return inet_addr(ip);
    139 }

    145 uint8_t get_remote_ipv6_media(char *msg, struct in6_addr addr)
    146 {
    147     char pattern[] = "c=IN IP6 ";
    148     char *begin, *end;
    149     char ip[128];
    150
    151     memset(&addr, 0, sizeof(addr));
    152     memset(ip, 0, 128);
    153
    154     begin = strstr(msg, pattern);
    155     if (!begin) {
    156       /* Can't find what we're looking at -> return no address */
    157       return 0;
    158     }
    159     begin += sizeof("c=IN IP6 ") - 1;
    160     end = strstr(begin, "\r\n");
    161     if (!end)
    162       return 0;
    163     strncpy(ip, begin, end - begin);

如果远程攻击者发送了特制的SIP消息的话,就可以触发这些溢出,导致拒绝服务或执行任意指令。

<*来源:Nico Golde (nion@debian.org
  
  链接:http://secunia.com/advisories/30095/
        http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=479039
*>

建议:
厂商补丁:

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

http://people.debian.org/~nion/nmu-diff/sip-tester-2.0.1-1.1_2.0.1-1.2.patch

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