Hi, I updated the patch to add the second CVE id. Going to upload my NMU now.
Cheers Nico -- Nico Golde - http://www.ngolde.de - [EMAIL PROTECTED] - GPG: 0x73647CFF For security reasons, all text in this mail is double-rot13 encrypted.
diff -u sip-tester-2.0.1/debian/changelog sip-tester-2.0.1/debian/changelog --- sip-tester-2.0.1/debian/changelog +++ sip-tester-2.0.1/debian/changelog @@ -1,3 +1,14 @@ +sip-tester (2.0.1-1.2) unstable; urgency=high + + * Non-maintainer upload by the Security Team. + * CVE-2008-1959: Fix stack-based buffer overflow in the + get_remote_video_port_media function + * CVE-2008-2085: Fix stack-baseed buffer overflow in the + get_remote_ip_media and get_remote_ipv6_media + functions which lead to arbitrary code execution (Closes: #479039). + + -- Nico Golde <[EMAIL PROTECTED]> Sun, 04 May 2008 13:58:41 +0200 + sip-tester (2.0.1-1.1) unstable; urgency=low * Non-maintainer upload. only in patch2: unchanged: --- sip-tester-2.0.1.orig/call.cpp +++ sip-tester-2.0.1/call.cpp @@ -409,7 +409,10 @@ char pattern[] = "c=IN IP4 "; char *begin, *end; char ip[32]; - begin = strstr(msg, pattern); + char *tmp = strdup(msg); + + if(!tmp) return INADDR_NONE; + begin = strstr(tmp, pattern); if (!begin) { /* Can't find what we're looking at -> return no address */ return INADDR_NONE; @@ -418,8 +421,11 @@ end = strstr(begin, "\r\n"); if (!end) return INADDR_NONE; + *end = 0; memset(ip, 0, 32); - strncpy(ip, begin, end - begin); + strncpy(ip, begin, sizeof(ip) - 1); + ip[sizeof(ip) - 1] = 0; + free(tmp); return inet_addr(ip); } @@ -432,11 +438,13 @@ char pattern[] = "c=IN IP6 "; char *begin, *end; char ip[128]; + char *tmp = strdup(msg); memset(&addr, 0, sizeof(addr)); memset(ip, 0, 128); - begin = strstr(msg, pattern); + if(!tmp) return 0; + begin = strstr(tmp, pattern); if (!begin) { /* Can't find what we're looking at -> return no address */ return 0; @@ -445,7 +453,11 @@ end = strstr(begin, "\r\n"); if (!end) return 0; - strncpy(ip, begin, end - begin); + + *end = 0; + strncpy(ip, begin, sizeof(ip) - 1); + ip[sizeof(ip) - 1] = 0; + free(tmp); if (!inet_pton(AF_INET6, ip, &addr)) { return 0; } @@ -461,7 +473,10 @@ char pattern[] = "m=audio "; char *begin, *end; char number[6]; - begin = strstr(msg, pattern); + char *tmp = strdup(msg); + + if(!tmp) return 0; + begin = strstr(tmp, pattern); if (!begin) { /* m=audio not found */ return 0; @@ -470,8 +485,12 @@ end = strstr(begin, "\r\n"); if (!end) ERROR("get_remote_audio_port_media: no CRLF found"); + + *end = 0; memset(number, 0, sizeof(number)); strncpy(number, begin, sizeof(number) - 1); + number[sizeof(number) - 1] = 0; + free(tmp); return atoi(number); } @@ -484,7 +503,10 @@ char pattern[] = "m=video "; char *begin, *end; char number[5]; - begin = strstr(msg, pattern); + char *tmp = strdup(msg); + + if(!tmp) return 0; + begin = strstr(tmp, pattern); if (!begin) { /* m=video not found */ return 0; @@ -493,8 +515,12 @@ end = strstr(begin, "\r\n"); if (!end) ERROR("get_remote_video_port_media: no CRLF found"); + + *end = 0; memset(number, 0, 5); - strncpy(number, begin, end - begin); + strncpy(number, begin, sizeof(number) - 1); + number[sizeof(number) - 1] = 0; + free(tmp); return atoi(number); }
signature.asc
Description: Digital signature