Package: openssl Version: 0.9.8o-1 Severity: normal Tags: patch, security User: [email protected] Usertags: origin-ubuntu maverick ubuntu-patch
Since SSLv2 is considered dangerous, it should be removed from OpenSSL. It hasn't be available in NSS or GnuTLS for a very long time. This patch implements a form for disabling SSLv2 -- all contexts have NO_SSL2 set, and the ssl2 method is rejected in SSL_CTX_new (similar to how FIPS mode works). Thanks, -Kees -- Kees Cook @debian.org
diff -Nru openssl-0.9.8o/debian/patches/no-sslv2.patch openssl-0.9.8o/debian/patches/no-sslv2.patch --- openssl-0.9.8o/debian/patches/no-sslv2.patch 1970-01-01 01:00:00.000000000 +0100 +++ openssl-0.9.8o/debian/patches/no-sslv2.patch 2010-07-19 22:40:36.000000000 +0200 @@ -0,0 +1,125 @@ +Description: disallow SSLv2 initialization, force it disabled for other methods. +Author: Kees Cook <[email protected]> + +Index: openssl-0.9.8o/ssl/ssl_lib.c +=================================================================== +--- openssl-0.9.8o.orig/ssl/ssl_lib.c 2010-02-17 20:43:08.000000000 +0100 ++++ openssl-0.9.8o/ssl/ssl_lib.c 2010-07-19 22:10:51.885282388 +0200 +@@ -986,8 +986,10 @@ + return 1; + + case SSL_CTRL_OPTIONS: ++ larg|=SSL_OP_NO_SSLv2; + return(s->options|=larg); + case SSL_CTRL_CLEAR_OPTIONS: ++ larg&=~SSL_OP_NO_SSLv2; + return(s->options&=~larg); + case SSL_CTRL_MODE: + return(s->mode|=larg); +@@ -1096,8 +1098,10 @@ + case SSL_CTRL_SESS_CACHE_FULL: + return(ctx->stats.sess_cache_full); + case SSL_CTRL_OPTIONS: ++ larg|=SSL_OP_NO_SSLv2; + return(ctx->options|=larg); + case SSL_CTRL_CLEAR_OPTIONS: ++ larg&=~SSL_OP_NO_SSLv2; + return(ctx->options&=~larg); + case SSL_CTRL_MODE: + return(ctx->mode|=larg); +@@ -1444,7 +1448,7 @@ + { + SSL_CTX *ret=NULL; + +- if (meth == NULL) ++ if (meth == NULL || meth->version <= SSL2_VERSION) + { + SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_NULL_SSL_METHOD_PASSED); + return(NULL); +@@ -1603,6 +1607,9 @@ + */ + ret->options |= SSL_OP_LEGACY_SERVER_CONNECT; + ++ /* Force no SSLv2 for all methods */ ++ ret->options |= SSL_OP_NO_SSLv2; ++ + return(ret); + err: + SSLerr(SSL_F_SSL_CTX_NEW,ERR_R_MALLOC_FAILURE); +Index: openssl-0.9.8o/test/testssl +=================================================================== +--- openssl-0.9.8o.orig/test/testssl 2005-02-02 00:48:36.000000000 +0100 ++++ openssl-0.9.8o/test/testssl 2010-07-19 22:10:51.885282388 +0200 +@@ -33,17 +33,17 @@ + ############################################################################# + + echo test sslv2 +-$ssltest -ssl2 $extra || exit 1 ++$ssltest -ssl2 $extra && exit 1 + + echo test sslv2 with server authentication +-$ssltest -ssl2 -server_auth $CA $extra || exit 1 ++$ssltest -ssl2 -server_auth $CA $extra && exit 1 + + if [ $dsa_cert = NO ]; then + echo test sslv2 with client authentication +- $ssltest -ssl2 -client_auth $CA $extra || exit 1 ++ $ssltest -ssl2 -client_auth $CA $extra && exit 1 + + echo test sslv2 with both client and server authentication +- $ssltest -ssl2 -server_auth -client_auth $CA $extra || exit 1 ++ $ssltest -ssl2 -server_auth -client_auth $CA $extra && exit 1 + fi + + echo test sslv3 +@@ -71,17 +71,17 @@ + $ssltest -server_auth -client_auth $CA $extra || exit 1 + + echo test sslv2 via BIO pair +-$ssltest -bio_pair -ssl2 $extra || exit 1 ++$ssltest -bio_pair -ssl2 $extra && exit 1 + + echo test sslv2 with server authentication via BIO pair +-$ssltest -bio_pair -ssl2 -server_auth $CA $extra || exit 1 ++$ssltest -bio_pair -ssl2 -server_auth $CA $extra && exit 1 + + if [ $dsa_cert = NO ]; then + echo test sslv2 with client authentication via BIO pair +- $ssltest -bio_pair -ssl2 -client_auth $CA $extra || exit 1 ++ $ssltest -bio_pair -ssl2 -client_auth $CA $extra && exit 1 + + echo test sslv2 with both client and server authentication via BIO pair +- $ssltest -bio_pair -ssl2 -server_auth -client_auth $CA $extra || exit 1 ++ $ssltest -bio_pair -ssl2 -server_auth -client_auth $CA $extra && exit 1 + fi + + echo test sslv3 via BIO pair +Index: openssl-0.9.8o/doc/ssl/SSL_CTX_new.pod +=================================================================== +--- openssl-0.9.8o.orig/doc/ssl/SSL_CTX_new.pod 2010-07-19 22:35:59.305282967 +0200 ++++ openssl-0.9.8o/doc/ssl/SSL_CTX_new.pod 2010-07-19 22:39:09.324088083 +0200 +@@ -30,6 +30,9 @@ + and will also indicate that it only understand SSLv2. A server will only + understand SSLv2 client hello messages. + ++Note: these methods are disabled. The SSLv2 protocol is considered unsafe, ++and all attempts to use it will result in the error "null ssl method passed". ++ + =item SSLv3_method(void), SSLv3_server_method(void), SSLv3_client_method(void) + + A TLS/SSL connection established with these methods will only understand the +Index: openssl-0.9.8o/doc/ssl/SSL_CTX_set_options.pod +=================================================================== +--- openssl-0.9.8o.orig/doc/ssl/SSL_CTX_set_options.pod 2010-07-19 22:39:31.044042368 +0200 ++++ openssl-0.9.8o/doc/ssl/SSL_CTX_set_options.pod 2010-07-19 22:40:34.534120783 +0200 +@@ -202,6 +202,9 @@ + + Do not use the SSLv2 protocol. + ++Note: this option is always set and cannot be disabled. SSLv2 is never ++available. ++ + =item SSL_OP_NO_SSLv3 + + Do not use the SSLv3 protocol. diff -Nru openssl-0.9.8o/debian/patches/series openssl-0.9.8o/debian/patches/series --- openssl-0.9.8o/debian/patches/series 2010-06-14 17:04:09.000000000 +0200 +++ openssl-0.9.8o/debian/patches/series 2010-07-19 22:10:48.000000000 +0200 @@ -21,3 +21,4 @@ aesni.patch perlpath-quilt.patch Bsymbolic-functions.patch +no-sslv2.patch diff -Nru openssl-0.9.8o/debian/rules openssl-0.9.8o/debian/rules --- openssl-0.9.8o/debian/rules 2010-07-19 16:44:00.000000000 +0200 +++ openssl-0.9.8o/debian/rules 2010-07-19 22:44:41.000000000 +0200 @@ -71,9 +71,11 @@ clean: dh_testdir dh_testroot + dh_clean -rm -f build -./Configure $(CONFARGS) debian-$(DEB_HOST_ARCH) [ ! -f Makefile ] || make -f Makefile clean clean-shared + [ ! -f test/Makefile ] || make -C test clean #-make -f Makefile dclean # perl util/ssldir.pl /usr/local/ssl -rm -f test/.rnd test/testkey.pem test/testreq.pem test/certCA.srl @@ -88,7 +90,6 @@ -rm -f libcrypto.* libssl.* -cd test && rm -f .rnd tmp.bntest tmp.bctest *.o *.obj lib tags core .pure .nfs* *.old *.bak fluff bntest ectest ecdsatest ecdhtest ideatest md2test md4test md5test hmactest rc2test rc4test rc5test destest shatest sha1test sha256t sha512t mdc2test rmdtest randtest dhtest enginetest bftest casttest ssltest exptest dsatest rsa_test evp_test *.ss *.srl log dummytest newkey.pem igetest -rm Makefile apps/CA.pl tools/c_rehash crypto/opensslconf.h crypto/x86_64cpuid.S - dh_clean binary-indep: build dh_testdir

