diff options
author | jsing <> | 2020-05-11 18:03:51 +0000 |
---|---|---|
committer | jsing <> | 2020-05-11 18:03:51 +0000 |
commit | 825d508a4b688821e99561b72a842c81c93b84a5 (patch) | |
tree | 8db77e997c933fb8987ec9250fff46520b8c6487 | |
parent | 28b584ddd2d0a41bceacbb1c350d790e3a39cd75 (diff) | |
download | openbsd-825d508a4b688821e99561b72a842c81c93b84a5.tar.gz openbsd-825d508a4b688821e99561b72a842c81c93b84a5.tar.bz2 openbsd-825d508a4b688821e99561b72a842c81c93b84a5.zip |
Add record version checks.
When legacy version is below TLSv1.2 ensure that the record version is
SSL3/TLS, however when the legacy version is set to TLSv1.2 require this
specifically.
ok beck@ tb@
-rw-r--r-- | src/lib/libssl/tls13_internal.h | 25 | ||||
-rw-r--r-- | src/lib/libssl/tls13_record.c | 4 | ||||
-rw-r--r-- | src/lib/libssl/tls13_record_layer.c | 17 |
3 files changed, 28 insertions, 18 deletions
diff --git a/src/lib/libssl/tls13_internal.h b/src/lib/libssl/tls13_internal.h index d597ef5a96..d35610e179 100644 --- a/src/lib/libssl/tls13_internal.h +++ b/src/lib/libssl/tls13_internal.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_internal.h,v 1.77 2020/05/11 17:46:46 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_internal.h,v 1.78 2020/05/11 18:03:51 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018 Bob Beck <beck@openbsd.org> | 3 | * Copyright (c) 2018 Bob Beck <beck@openbsd.org> |
4 | * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> | 4 | * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> |
@@ -27,17 +27,18 @@ | |||
27 | 27 | ||
28 | __BEGIN_HIDDEN_DECLS | 28 | __BEGIN_HIDDEN_DECLS |
29 | 29 | ||
30 | #define TLS13_HS_CLIENT 1 | 30 | #define TLS13_HS_CLIENT 1 |
31 | #define TLS13_HS_SERVER 2 | 31 | #define TLS13_HS_SERVER 2 |
32 | 32 | ||
33 | #define TLS13_IO_SUCCESS 1 | 33 | #define TLS13_IO_SUCCESS 1 |
34 | #define TLS13_IO_EOF 0 | 34 | #define TLS13_IO_EOF 0 |
35 | #define TLS13_IO_FAILURE -1 | 35 | #define TLS13_IO_FAILURE -1 |
36 | #define TLS13_IO_ALERT -2 | 36 | #define TLS13_IO_ALERT -2 |
37 | #define TLS13_IO_WANT_POLLIN -3 | 37 | #define TLS13_IO_WANT_POLLIN -3 |
38 | #define TLS13_IO_WANT_POLLOUT -4 | 38 | #define TLS13_IO_WANT_POLLOUT -4 |
39 | #define TLS13_IO_WANT_RETRY -5 /* Retry the previous call immediately. */ | 39 | #define TLS13_IO_WANT_RETRY -5 /* Retry the previous call immediately. */ |
40 | #define TLS13_IO_USE_LEGACY -6 | 40 | #define TLS13_IO_USE_LEGACY -6 |
41 | #define TLS13_IO_RECORD_VERSION -7 | ||
41 | 42 | ||
42 | #define TLS13_ERR_VERIFY_FAILED 16 | 43 | #define TLS13_ERR_VERIFY_FAILED 16 |
43 | #define TLS13_ERR_HRR_FAILED 17 | 44 | #define TLS13_ERR_HRR_FAILED 17 |
diff --git a/src/lib/libssl/tls13_record.c b/src/lib/libssl/tls13_record.c index 9ab4cdba36..ca61a94ff1 100644 --- a/src/lib/libssl/tls13_record.c +++ b/src/lib/libssl/tls13_record.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_record.c,v 1.4 2020/02/15 14:36:58 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_record.c,v 1.5 2020/05/11 18:03:51 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -146,6 +146,8 @@ tls13_record_recv(struct tls13_record *rec, tls13_read_cb wire_read, | |||
146 | return TLS13_IO_FAILURE; | 146 | return TLS13_IO_FAILURE; |
147 | 147 | ||
148 | /* XXX - record overflow alert. */ | 148 | /* XXX - record overflow alert. */ |
149 | if ((rec_version >> 8) != SSL3_VERSION_MAJOR) | ||
150 | return TLS13_IO_RECORD_VERSION; | ||
149 | if (rec_len > TLS13_RECORD_MAX_CIPHERTEXT_LEN) | 151 | if (rec_len > TLS13_RECORD_MAX_CIPHERTEXT_LEN) |
150 | return TLS13_IO_FAILURE; | 152 | return TLS13_IO_FAILURE; |
151 | 153 | ||
diff --git a/src/lib/libssl/tls13_record_layer.c b/src/lib/libssl/tls13_record_layer.c index e7650b1ecc..8ca52d0b7f 100644 --- a/src/lib/libssl/tls13_record_layer.c +++ b/src/lib/libssl/tls13_record_layer.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_record_layer.c,v 1.39 2020/05/11 17:46:46 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_record_layer.c,v 1.40 2020/05/11 18:03:51 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -769,11 +769,18 @@ tls13_record_layer_read_record(struct tls13_record_layer *rl) | |||
769 | goto err; | 769 | goto err; |
770 | } | 770 | } |
771 | 771 | ||
772 | if ((ret = tls13_record_recv(rl->rrec, rl->cb.wire_read, rl->cb_arg)) <= 0) | 772 | if ((ret = tls13_record_recv(rl->rrec, rl->cb.wire_read, rl->cb_arg)) <= 0) { |
773 | switch (ret) { | ||
774 | case TLS13_IO_RECORD_VERSION: | ||
775 | return tls13_send_alert(rl, SSL_AD_PROTOCOL_VERSION); | ||
776 | } | ||
773 | return ret; | 777 | return ret; |
774 | 778 | } | |
775 | /* XXX - record version checks. */ | 779 | |
776 | 780 | if (rl->legacy_version == TLS1_2_VERSION && | |
781 | tls13_record_version(rl->rrec) != TLS1_2_VERSION) | ||
782 | return tls13_send_alert(rl, SSL_AD_PROTOCOL_VERSION); | ||
783 | |||
777 | content_type = tls13_record_content_type(rl->rrec); | 784 | content_type = tls13_record_content_type(rl->rrec); |
778 | 785 | ||
779 | /* | 786 | /* |