updated SIPp to 3.1, which fixes CVE-2008-1959

patch-ae has been added as a fix for CVE-2008-2085
This commit is contained in:
Georg Schwarz 2008-07-12 15:08:48 +00:00 committed by Thomas Klausner
parent a4fe9f2c9f
commit 9c8d29fe17
8 changed files with 193 additions and 123 deletions

View file

@ -1,7 +1,7 @@
# $NetBSD: Makefile,v 1.6 2006/11/11 11:31:06 shattered Exp $
# $NetBSD: Makefile,v 1.7 2008/07/12 15:08:48 gschwarz Exp $
DISTNAME= sipp.1.0
PKGNAME= sipp-1.0
DISTNAME= sipp.3.1.src
PKGNAME= sipp-3.1
CATEGORIES= net
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=sipp/}
@ -9,7 +9,7 @@ MAINTAINER= schwarz@NetBSD.org
HOMEPAGE= http://sipp.sourceforge.net/
COMMENT= SIPp is a free Open Source SIP test tool/traffic generator
WRKSRC= ${WRKDIR}/sipp
WRKSRC= ${WRKDIR}/sipp.svn
NO_CONFIGURE= yes
USE_TOOLS+= gmake
USE_LANGUAGES= c c++

View file

@ -1 +0,0 @@
- This package has known vulnerabilities, please investigate and fix if possible. (see: CVE-2008-1959, CVE-2008-2085).

View file

@ -1,9 +1,10 @@
$NetBSD: distinfo,v 1.4 2006/06/03 18:25:44 gschwarz Exp $
$NetBSD: distinfo,v 1.5 2008/07/12 15:08:48 gschwarz Exp $
SHA1 (sipp.1.0.tar.gz) = d9d75fc5a3d238bec8e3975870ef9da162ed2447
RMD160 (sipp.1.0.tar.gz) = cfbbc1f40371a8e5bfb276e595f51d84dde78952
Size (sipp.1.0.tar.gz) = 69330 bytes
SHA1 (patch-aa) = 78ce8762b43a2f94d4807f7f4bbbb2d4e37612a7
SHA1 (patch-ab) = 8d94bbbc21898bb4da5fc9ad855428484b1cfbe0
SHA1 (patch-ac) = 0afa1c52cacf764ae2aedfe3ed3bf8da09f554d6
SHA1 (patch-ad) = ae432d5ea09b2ef235221a9fb0e134c250f8ae35
SHA1 (sipp.3.1.src.tar.gz) = 781e50a74844abbdff1b90781fa24d062f0c1352
RMD160 (sipp.3.1.src.tar.gz) = bd89c94b3a006fdc5717d43765776901976dbf71
Size (sipp.3.1.src.tar.gz) = 9428792 bytes
SHA1 (patch-aa) = 236ab7c683b5568802504aecebfe4730c9af04c1
SHA1 (patch-ab) = af7df29abfc0ae49e2e52a138e3a0c5c156b2a30
SHA1 (patch-ac) = 16ecd2344318b4af570cc062bf357dfde0676831
SHA1 (patch-ad) = c5927fd3026bccc344e9a0b095435b5a3dd72aa0
SHA1 (patch-ae) = 2ec35d0077019a3cb0915e1f428750b0eee4aea7

View file

@ -1,10 +1,10 @@
$NetBSD: patch-aa,v 1.4 2006/06/03 18:25:47 gschwarz Exp $
$NetBSD: patch-aa,v 1.5 2008/07/12 15:08:48 gschwarz Exp $
--- Makefile.orig 2004-09-20 15:30:03.000000000 +0000
+++ Makefile
@@ -28,14 +28,6 @@ OBJ= xp_parser.o scenario.o screen.o cal
# Include directories
INCDIR= -I.
--- Makefile.orig 2008-04-11 14:26:37.000000000 +0200
+++ Makefile 2008-07-12 16:35:34.000000000 +0200
@@ -29,15 +29,6 @@
OBJ= xp_parser.o message.o scenario.o screen.o call.o comp.o sipp.o stat.o \
actions.o variables.o infile.o deadcall.o task.o socketowner.o listener.o
-# Libraries directories
-LIBDIR_linux=
@ -13,11 +13,12 @@ $NetBSD: patch-aa,v 1.4 2006/06/03 18:25:47 gschwarz Exp $
-LIBDIR_tru64=
-LIBDIR_SunOS=
-LIBDIR_Cygwin=
-LIBDIR_Darwin=
-
# Archive file created in your home directory when building the archive target
# ARCHIVE= $(HOME)/$(OUTPUT).tgz
ARCHIVE= $(OUTPUT).tgz
@@ -47,99 +39,16 @@ TOCLEAN= sipp_errors.log sipp_messages.l
@@ -49,102 +40,9 @@
###################################################################
# Generic Rules
@ -32,24 +33,27 @@ $NetBSD: patch-aa,v 1.4 2006/06/03 18:25:47 gschwarz Exp $
-SYSTEM_OSF1=tru64
-SYSTEM_SunOS=SunOS
-SYSTEM_CYGWIN=Cygwin
-SYSTEM_Darwin=Darwin
-SYSTEM=$(SYSTEM_$(OSNAME))
-
-# C compiler
-CC_hpux=aCC
-CC_linux=cc
-CC_hpux=aCC
-CC_linux=gcc
-CC_freebsd=cc
-CC_tru64=cc
-CC_SunOS=gcc
-CC_Cygwin=cc
-CC_Darwin=cc
-CC=$(CC_$(SYSTEM))
-
-# C++ compiler mapping
-CPP_hpux=aCC
-CPP_linux=gcc
-CPP_linux=g++
-CPP_freebsd=g++
-CPP_tru64=cxx
-CPP_SunOS=gcc
-CPP_SunOS=g++
-CPP_Cygwin=g++
-CPP_Darwin=g++
-CPP=$(CPP_$(SYSTEM))
-
-#Model specific flags
@ -60,25 +64,30 @@ $NetBSD: patch-aa,v 1.4 2006/06/03 18:25:47 gschwarz Exp $
-MFLAGS_i586=
-MFLAGS_i486=
-MFLAGS_i386=
-MFLAGS_ppc=
-MFLAGS=$(MFLAGS_$(MODELNAME))
-
-#C Compiler Flags
-CFLAGS_hpux=-D__HPUX
-CFLAGS_linux=-D__LINUX -pthread
-# supress warning #829 (Implicit conversion of string literal to
-#'char *' is deprecated) since this is both common and harmless
-CFLAGS_hpux=-D__HPUX -DPROTOTYPES +W829
-CFLAGS_linux=-D__LINUX -pthread
-CFLAGS_freebsd=-D__LINUX -pthread
-CFLAGS_tru64=-D__OSF1 -pthread
-CFLAGS_SunOS=-g
-CFLAGS_Cygwin=-D__CYGWIN
-CFLAGS=$(CFLAGS_$(SYSTEM)) -D__3PCC__
-CFLAGS_SunOS=${DEBUG_FLAGS} -D__SUNOS
-CFLAGS_Cygwin=-D__CYGWIN -Dsocklen_t=int
-CFLAGS_Darwin=-D__DARWIN
-CFLAGS=$(CFLAGS_$(SYSTEM)) $(VERINFO) $(TLS) $(PCAPPLAY) $(EXTRACFLAGS)
-
-#C++ Compiler Flags
-CPPFLAGS_hpux=-AA -mt -D__HPUX
-CPPFLAGS_linux=-D__LINUX -pthread
-CPPFLAGS_hpux=-AA -mt -D__HPUX -D_INCLUDE_LONGLONG -DNOMACROS +W829
-CPPFLAGS_linux=-D__LINUX -pthread
-CPPFLAGS_freebsd=-D__LINUX -pthread
-CPPFLAGS_tru64=-D__OSF1 -pthread
-CPPFLAGS_SunOS=-g
-CPPFLAGS_Cygwin=-D__CYGWIN
-CPPFLAGS=$(CPPFLAGS_$(SYSTEM)) -D__3PCC__
-CPPFLAGS_SunOS=${DEBUG_FLAGS} -D__SUNOS
-CPPFLAGS_Cygwin=-D__CYGWIN -Dsocklen_t=int
-CPPFLAGS_Darwin=-D__DARWIN
-CPPFLAGS=$(CPPFLAGS_$(SYSTEM)) $(VERINFO) $(TLS) $(PCAPPLAY) $(EXTRACPPFLAGS)
-
-#Linker mapping
-CCLINK_hpux=aCC
@ -87,53 +96,64 @@ $NetBSD: patch-aa,v 1.4 2006/06/03 18:25:47 gschwarz Exp $
-CCLINK_tru64=cxx
-CCLINK_SunOS=gcc
-CCLINK_Cygwin=g++
-CCLINK_Darwin=g++
-CCLINK=$(CCLINK_$(SYSTEM))
-
#Linker Flags
-#Linker Flags
-LFLAGS_hpux=-AA -mt
-LFLAGS_linux=
-LFLAGS_freebsd=
-LFLAGS_tru64=
-LFLAGS_SunOS=
-LFLAGS_SunOS=-mt ${DEBUG_FLAGS}
-LFLAGS_Cygwin=
-LFLAGS=$(LFLAGS_$(SYSTEM))
-LFLAGS_Darwin=
-LFLAGS=$(LFLAGS_$(SYSTEM)) $(EXTRALFLAGS)
-
-#Link Libraries
-LIBS_linux= -ldl -lpthread -lcurses -lstdc++
-LIBS_hpux= -lcurses
-LIBS_linux= -ldl -lpthread -lncurses -lstdc++ -lm -L /usr/local/lib -L /usr/lib -L /usr/lib64
-LIBS_hpux= -lcurses -lpthread -L /opt/openssl/lib -L /usr/local/lib
-LIBS_tru64= -lcurses -lpthread
-LIBS_freebsd= -lcurses -pthread
-LIBS_SunOS= -lcurses -lpthread -lnsl -lsocket -lstdc++ -ldl
-LIBS_Cygwin= -lcurses -lpthread -lstdc++
-LIBS=$(LIBS_$(SYSTEM))
-LIBS_freebsd= -lcurses -pthread -L /usr/local/lib
-LIBS_SunOS= -lcurses -lpthread -lnsl -lsocket -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic -lm -ldl -L /usr/local/ssl/lib/
-LIBS_Cygwin= -lcurses -lpthread -lstdc++ -L /usr/lib/WpdPack/Lib
-LIBS_Darwin= -lcurses
-LIBS=$(LIBS_$(SYSTEM)) $(EXTRALIBS)
+LDFLAGS+= ${PTHREAD_LDFLAGS} ${DL_FLAGS}
+LIBS.SunOS= -lnsl -lsocket
+LIBS+= -lncurses ${PTHREAD_LIBS} ${LIBS.${OPSYS}} ${DL_LIBS}
# Operating system detection rule
# Include directories
INCDIR_linux=-I. -I/usr/include/openssl
@@ -159,8 +57,7 @@
-include local.mk
# Building without TLS and authentication (no openssl pre-requisite)
-all:
- make OSNAME=`uname|sed -e "s/CYGWIN.*/CYGWIN/"` MODELNAME=`uname -m` $(OUTPUT)
- make OSNAME=`uname|sed -e "s/CYGWIN.*/CYGWIN/"` MODELNAME=`uname -m|sed "s/Power Macintosh/ppc/"` $(OUTPUT)
+all: ${OUTPUT}
$(OUTPUT): $(OBJ)
# Building with TLS and authentication
ossl:
@@ -186,7 +83,7 @@
make OSNAME=`uname|sed -e "s/CYGWIN.*/CYGWIN/"` MODELNAME=`uname -m|sed "s/Power Macintosh/ppc/"` OBJ_TLS="auth.o sslinit.o sslthreadsafe.o milenage.o rijndael.o" TLS_LIBS="-lssl -lcrypto" TLS="-D_USE_OPENSSL -DOPENSSL_NO_KRB5" OBJ_PCAPPLAY="send_packets.o prepare_pcap.o" PCAPPLAY_LIBS="-lwpcap" PCAPPLAY="-DPCAPPLAY" $(OUTPUT)
$(OUTPUT): $(OBJ_TLS) $(OBJ_PCAPPLAY) $(OBJ)
- $(CCLINK) $(LFLAGS) $(MFLAGS) $(LIBDIR_$(SYSTEM)) \
- $(DEBUG_FLAGS) -o $@ $(OBJ) $(LIBS)
+ $(CXX) $(LDFLAGS) $(DEBUG_FLAGS) -o $@ $(OBJ) $(LIBS)
+ $(CXX) $(LFLAGS) \
$(DEBUG_FLAGS) -o $@ $(OBJ_TLS) $(OBJ_PCAPPLAY) $(OBJ) $(LIBS) $(TLS_LIBS) $(PCAPPLAY_LIBS) $(EXTRAENDLIBS)
debug:
DEBUG_FLAGS="-g -pg" ; export DEBUG_FLAGS ; make all
@@ -163,11 +72,11 @@ archive:
@@ -217,10 +114,10 @@
*.o: *.h *.hpp
.C.o:
- $(CPP) $(CPPFLAGS) $(MFLAGS) $(DEBUG_FLAGS) $(INCDIR) -c -o $*.o $<
+ $(CXX) $(CXXFLAGS) $(DEBUG_FLAGS) $(INCDIR) -c -o $@ $<
- $(CPP) $(CPPFLAGS) $(MFLAGS) $(DEBUG_FLAGS) $(_HPUX_LI_FLAG) $(INCDIR) -c -o $*.o $<
+ $(CXX) $(CPPFLAGS) $(DEBUG_FLAGS) $(_HPUX_LI_FLAG) $(INCDIR) -c -o $*.o $<
.cpp.o:
- $(CPP) $(CPPFLAGS) $(MFLAGS) $(DEBUG_FLAGS) $(INCDIR) -c -o $*.o $<
+ $(CXX) $(CXXFLAGS) $(DEBUG_FLAGS) $(INCDIR) -c -o $@ $<
- $(CPP) $(CPPFLAGS) $(MFLAGS) $(DEBUG_FLAGS) $(_HPUX_LI_FLAG) $(INCDIR) -c -o $*.o $<
+ $(CXX) $(CPPFLAGS) $(DEBUG_FLAGS) $(_HPUX_LI_FLAG) $(INCDIR) -c -o $*.o $<
.c.o:
- $(CC) $(CFLAGS) $(MFLAGS) $(DEBUG_FLAGS) $(INCDIR) -c -o $*.o $<
+ $(CC) $(CFLAGS) $(DEBUG_FLAGS) $(INCDIR) -c -o $@ $<
- $(CC) $(CFLAGS) $(MFLAGS) $(DEBUG_FLAGS) $(_HPUX_LI_FLAG) $(INCDIR) -c -o $*.o $<
+ $(CC) $(CFLAGS) $(DEBUG_FLAGS) $(_HPUX_LI_FLAG) $(INCDIR) -c -o $*.o $<

View file

@ -1,13 +1,13 @@
$NetBSD: patch-ab,v 1.1 2005/11/19 21:26:23 gschwarz Exp $
$NetBSD: patch-ab,v 1.2 2008/07/12 15:08:48 gschwarz Exp $
--- call.cpp.orig 2005-11-19 00:38:47.000000000 +0100
+++ call.cpp 2005-11-19 00:39:55.000000000 +0100
@@ -249,7 +249,7 @@
getsockname(call_socket,
(sockaddr *)(void *)&saddr,
- &len);
+ (socklen_t *) &len);
#ifdef __hpux
call_port = saddr.sin_port;
#else
--- xp_parser.c.orig 2008-07-12 16:09:47.000000000 +0200
+++ xp_parser.c 2008-07-12 16:10:02.000000000 +0200
@@ -37,7 +37,7 @@
#include <string.h>
#include <ctype.h>
-#include <xp_parser.h>
+#include "xp_parser.h"
/************* Constants and Global variables ***********/

View file

@ -1,49 +1,13 @@
$NetBSD: patch-ac,v 1.1 2005/11/19 21:26:23 gschwarz Exp $
$NetBSD: patch-ac,v 1.2 2008/07/12 15:08:49 gschwarz Exp $
--- sipp.cpp.orig 2005-11-19 00:41:45.000000000 +0100
+++ sipp.cpp 2005-11-19 00:44:20.000000000 +0100
@@ -1241,7 +1241,7 @@
sipp_socklen_t len = sizeof(twinSipp_sockaddr);
twinSippSocket = accept(s,
(sockaddr *)(void *)&twinSipp_sockaddr,
- &len);
+ (socklen_t *) &len);
pollset_add(0, twinSippSocket);
return(-2);
@@ -1271,7 +1271,7 @@
sipp_socklen_t len = sizeof(remote_sockaddr);
int new_sock = accept(s,
(sockaddr *)(void *)&remote_sockaddr,
- &len);
+ (socklen_t *) &len);
pollset_add(0, new_sock);
return -2;
@@ -1316,7 +1316,7 @@
buffer_size,
0,
(sockaddr *)(void *)&remote_sockaddr,
- &len);
+ (socklen_t *) &len);
} else {
size = recvfrom(s,
@@ -1648,7 +1648,7 @@
--- sipp.cpp.orig 2008-07-12 15:57:53.000000000 +0200
+++ sipp.cpp 2008-07-12 16:05:00.000000000 +0200
@@ -3587,7 +3587,7 @@
msg,
sizeof(msg), 0,
media_bufsize, 0,
(sockaddr *)(void *) &remote_rtp_addr,
- &len);
+ (socklen_t *) &len);
+ (sipp_socklen_t *) &len);
if (((long)nr) < 0) {
WARNING_P2("%s %i",
@@ -2665,7 +2665,7 @@
sipp_socklen_t len = sizeof(local_sockaddr);
getsockname(main_socket,
(sockaddr *)(void *)&local_sockaddr,
- &len);
+ (socklen_t *) &len);
#ifdef __hpux
local_port = local_sockaddr.sin_port;
#else
WARNING("%s %i",

View file

@ -1,12 +1,13 @@
$NetBSD: patch-ad,v 1.1 2006/06/03 18:25:47 gschwarz Exp $
$NetBSD: patch-ad,v 1.2 2008/07/12 15:08:49 gschwarz Exp $
--- comp.h.orig 2006-05-06 11:22:49.000000000 +0000
+++ comp.h
@@ -19,6 +19,7 @@
* From Hewlett Packard Company.
*/
+#include <sys/types.h>
#include <sys/socket.h>
#ifdef __cplusplus
--- screen.cpp.orig 2008-07-12 16:12:03.000000000 +0200
+++ screen.cpp 2008-07-12 16:12:07.000000000 +0200
@@ -29,7 +29,7 @@
#include <stdlib.h>
#include <string.h>
#include <signal.h>
-#include <screen.hpp>
+#include "screen.hpp"
#include <errno.h>
#include <sys/time.h>
#include <sys/resource.h>

85
sipp/patches/patch-ae Normal file
View file

@ -0,0 +1,85 @@
$NetBSD: patch-ae,v 1.1 2008/07/12 15:08:49 gschwarz Exp $
--- call.cpp.orig 2008-07-12 16:46:12.000000000 +0200
+++ call.cpp 2008-07-12 17:00:24.000000000 +0200
@@ -124,7 +124,14 @@
char pattern[] = "c=IN IP4 ";
char *begin, *end;
char ip[32];
- begin = strstr(msg, pattern);
+/* patch to counter CVE-2008-2085
+ based on patch published by Nico Golde ias in
+ http://people.debian.org/~nion/nmu-diff/sip-tester-2.0.1-1.1_2.0.1-1.2.patch
+*/
+
+ 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;
@@ -133,8 +140,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);
}
@@ -147,11 +157,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;
@@ -160,7 +172,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;
}
@@ -187,7 +203,10 @@
ERROR("Internal error: Undefined media pattern %d\n", 3);
}
- begin = strstr(msg, pattern);
+ char *tmp = strdup(msg);
+
+ if(!tmp) return 0;
+ begin = strstr(tmp, pattern);
if (!begin) {
/* m=audio not found */
return 0;
@@ -196,8 +215,11 @@
end = strstr(begin, "\r\n");
if (!end)
ERROR("get_remote_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);
}