summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormarkus <>2009-11-10 09:09:40 +0000
committermarkus <>2009-11-10 09:09:40 +0000
commitfe6c9378da6c3c76e86e1fa03619eda8e4da9408 (patch)
tree1ee3d60cfc9aa5a4238a876f10fd267d699c4e14
parent11d78159f32f020cba13d2025ccc5caa8b71aaae (diff)
downloadopenbsd-fe6c9378da6c3c76e86e1fa03619eda8e4da9408.tar.gz
openbsd-fe6c9378da6c3c76e86e1fa03619eda8e4da9408.tar.bz2
openbsd-fe6c9378da6c3c76e86e1fa03619eda8e4da9408.zip
pull Ben Lauries blind prefix injection fix for CVE-2009-3555 from
openssl 0.9.8l; crank minor version; ok djm@ deraadt@; initially from jsg@
-rw-r--r--src/lib/libssl/s3_lib.c3
-rw-r--r--src/lib/libssl/s3_pkt.c4
-rw-r--r--src/lib/libssl/s3_srvr.c8
-rw-r--r--src/lib/libssl/shlib_version2
-rw-r--r--src/lib/libssl/src/ssl/s3_lib.c3
-rw-r--r--src/lib/libssl/src/ssl/s3_pkt.c4
-rw-r--r--src/lib/libssl/src/ssl/s3_srvr.c8
-rw-r--r--src/lib/libssl/src/ssl/ssl3.h9
-rw-r--r--src/lib/libssl/ssl/shlib_version2
-rw-r--r--src/lib/libssl/ssl3.h9
10 files changed, 40 insertions, 12 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c
index 8916a0b1b3..5aa7bb21da 100644
--- a/src/lib/libssl/s3_lib.c
+++ b/src/lib/libssl/s3_lib.c
@@ -2592,6 +2592,9 @@ int ssl3_renegotiate(SSL *s)
2592 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) 2592 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
2593 return(0); 2593 return(0);
2594 2594
2595 if (!(s->s3->flags & SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
2596 return(0);
2597
2595 s->s3->renegotiate=1; 2598 s->s3->renegotiate=1;
2596 return(1); 2599 return(1);
2597 } 2600 }
diff --git a/src/lib/libssl/s3_pkt.c b/src/lib/libssl/s3_pkt.c
index 9476dcddf6..b98b84044f 100644
--- a/src/lib/libssl/s3_pkt.c
+++ b/src/lib/libssl/s3_pkt.c
@@ -985,6 +985,7 @@ start:
985 985
986 if (SSL_is_init_finished(s) && 986 if (SSL_is_init_finished(s) &&
987 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && 987 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) &&
988 (s->s3->flags & SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION) &&
988 !s->s3->renegotiate) 989 !s->s3->renegotiate)
989 { 990 {
990 ssl3_renegotiate(s); 991 ssl3_renegotiate(s);
@@ -1117,7 +1118,8 @@ start:
1117 if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) 1118 if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake)
1118 { 1119 {
1119 if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && 1120 if (((s->state&SSL_ST_MASK) == SSL_ST_OK) &&
1120 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) 1121 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) &&
1122 (s->s3->flags & SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
1121 { 1123 {
1122#if 0 /* worked only because C operator preferences are not as expected (and 1124#if 0 /* worked only because C operator preferences are not as expected (and
1123 * because this is not really needed for clients except for detecting 1125 * because this is not really needed for clients except for detecting
diff --git a/src/lib/libssl/s3_srvr.c b/src/lib/libssl/s3_srvr.c
index 80b45eb86f..79f3706c31 100644
--- a/src/lib/libssl/s3_srvr.c
+++ b/src/lib/libssl/s3_srvr.c
@@ -718,6 +718,14 @@ int ssl3_get_client_hello(SSL *s)
718#endif 718#endif
719 STACK_OF(SSL_CIPHER) *ciphers=NULL; 719 STACK_OF(SSL_CIPHER) *ciphers=NULL;
720 720
721 if (s->new_session
722 && !(s->s3->flags&SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
723 {
724 al=SSL_AD_HANDSHAKE_FAILURE;
725 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
726 goto f_err;
727 }
728
721 /* We do this so that we will respond with our native type. 729 /* We do this so that we will respond with our native type.
722 * If we are TLSv1 and we get SSLv3, we will respond with TLSv1, 730 * If we are TLSv1 and we get SSLv3, we will respond with TLSv1,
723 * This down switching should be handled by a different method. 731 * This down switching should be handled by a different method.
diff --git a/src/lib/libssl/shlib_version b/src/lib/libssl/shlib_version
index 7791322042..b9229d3517 100644
--- a/src/lib/libssl/shlib_version
+++ b/src/lib/libssl/shlib_version
@@ -1,2 +1,2 @@
1major=15 1major=15
2minor=0 2minor=1
diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c
index 8916a0b1b3..5aa7bb21da 100644
--- a/src/lib/libssl/src/ssl/s3_lib.c
+++ b/src/lib/libssl/src/ssl/s3_lib.c
@@ -2592,6 +2592,9 @@ int ssl3_renegotiate(SSL *s)
2592 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) 2592 if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)
2593 return(0); 2593 return(0);
2594 2594
2595 if (!(s->s3->flags & SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
2596 return(0);
2597
2595 s->s3->renegotiate=1; 2598 s->s3->renegotiate=1;
2596 return(1); 2599 return(1);
2597 } 2600 }
diff --git a/src/lib/libssl/src/ssl/s3_pkt.c b/src/lib/libssl/src/ssl/s3_pkt.c
index 9476dcddf6..b98b84044f 100644
--- a/src/lib/libssl/src/ssl/s3_pkt.c
+++ b/src/lib/libssl/src/ssl/s3_pkt.c
@@ -985,6 +985,7 @@ start:
985 985
986 if (SSL_is_init_finished(s) && 986 if (SSL_is_init_finished(s) &&
987 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && 987 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) &&
988 (s->s3->flags & SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION) &&
988 !s->s3->renegotiate) 989 !s->s3->renegotiate)
989 { 990 {
990 ssl3_renegotiate(s); 991 ssl3_renegotiate(s);
@@ -1117,7 +1118,8 @@ start:
1117 if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) 1118 if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake)
1118 { 1119 {
1119 if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && 1120 if (((s->state&SSL_ST_MASK) == SSL_ST_OK) &&
1120 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) 1121 !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) &&
1122 (s->s3->flags & SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
1121 { 1123 {
1122#if 0 /* worked only because C operator preferences are not as expected (and 1124#if 0 /* worked only because C operator preferences are not as expected (and
1123 * because this is not really needed for clients except for detecting 1125 * because this is not really needed for clients except for detecting
diff --git a/src/lib/libssl/src/ssl/s3_srvr.c b/src/lib/libssl/src/ssl/s3_srvr.c
index 80b45eb86f..79f3706c31 100644
--- a/src/lib/libssl/src/ssl/s3_srvr.c
+++ b/src/lib/libssl/src/ssl/s3_srvr.c
@@ -718,6 +718,14 @@ int ssl3_get_client_hello(SSL *s)
718#endif 718#endif
719 STACK_OF(SSL_CIPHER) *ciphers=NULL; 719 STACK_OF(SSL_CIPHER) *ciphers=NULL;
720 720
721 if (s->new_session
722 && !(s->s3->flags&SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION))
723 {
724 al=SSL_AD_HANDSHAKE_FAILURE;
725 SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
726 goto f_err;
727 }
728
721 /* We do this so that we will respond with our native type. 729 /* We do this so that we will respond with our native type.
722 * If we are TLSv1 and we get SSLv3, we will respond with TLSv1, 730 * If we are TLSv1 and we get SSLv3, we will respond with TLSv1,
723 * This down switching should be handled by a different method. 731 * This down switching should be handled by a different method.
diff --git a/src/lib/libssl/src/ssl/ssl3.h b/src/lib/libssl/src/ssl/ssl3.h
index 4b1e2e9834..a1a19cbfcb 100644
--- a/src/lib/libssl/src/ssl/ssl3.h
+++ b/src/lib/libssl/src/ssl/ssl3.h
@@ -326,10 +326,11 @@ typedef struct ssl3_buffer_st
326#define SSL3_CT_NUMBER 7 326#define SSL3_CT_NUMBER 7
327 327
328 328
329#define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 329#define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001
330#define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002 330#define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002
331#define SSL3_FLAGS_POP_BUFFER 0x0004 331#define SSL3_FLAGS_POP_BUFFER 0x0004
332#define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 332#define TLS1_FLAGS_TLS_PADDING_BUG 0x0008
333#define SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x0010
333 334
334typedef struct ssl3_state_st 335typedef struct ssl3_state_st
335 { 336 {
diff --git a/src/lib/libssl/ssl/shlib_version b/src/lib/libssl/ssl/shlib_version
index 7791322042..b9229d3517 100644
--- a/src/lib/libssl/ssl/shlib_version
+++ b/src/lib/libssl/ssl/shlib_version
@@ -1,2 +1,2 @@
1major=15 1major=15
2minor=0 2minor=1
diff --git a/src/lib/libssl/ssl3.h b/src/lib/libssl/ssl3.h
index 4b1e2e9834..a1a19cbfcb 100644
--- a/src/lib/libssl/ssl3.h
+++ b/src/lib/libssl/ssl3.h
@@ -326,10 +326,11 @@ typedef struct ssl3_buffer_st
326#define SSL3_CT_NUMBER 7 326#define SSL3_CT_NUMBER 7
327 327
328 328
329#define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 329#define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001
330#define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002 330#define SSL3_FLAGS_DELAY_CLIENT_FINISHED 0x0002
331#define SSL3_FLAGS_POP_BUFFER 0x0004 331#define SSL3_FLAGS_POP_BUFFER 0x0004
332#define TLS1_FLAGS_TLS_PADDING_BUG 0x0008 332#define TLS1_FLAGS_TLS_PADDING_BUG 0x0008
333#define SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x0010
333 334
334typedef struct ssl3_state_st 335typedef struct ssl3_state_st
335 { 336 {