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 | /* |
