diff options
author | tb <> | 2020-06-01 08:04:02 +0000 |
---|---|---|
committer | tb <> | 2020-06-01 08:04:02 +0000 |
commit | 3ba939cf288194f330bab0830f7d8328d9309fdb (patch) | |
tree | c1e5b705d23cf6a85e3072ffb48c3f7463ae92c3 /src | |
parent | 2a9f5cdb5b5312ddcf16e99a09e164730495d0a0 (diff) | |
download | openbsd-3ba939cf288194f330bab0830f7d8328d9309fdb.tar.gz openbsd-3ba939cf288194f330bab0830f7d8328d9309fdb.tar.bz2 openbsd-3ba939cf288194f330bab0830f7d8328d9309fdb.zip |
Send an illegal_parameter alert if a client sends us invalid DH key
shares. Previously we would fail and just close the pipe.
Fixes the remaining failing test-dhe-rsa-key-exchange-with-bad-messages.py
tests of tlsfuzzer.
ok beck (earlier version) jsing
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/ssl_srvr.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c index fac24f4d00..15dfdc35b1 100644 --- a/src/lib/libssl/ssl_srvr.c +++ b/src/lib/libssl/ssl_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_srvr.c,v 1.77 2020/05/31 16:36:35 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_srvr.c,v 1.78 2020/06/01 08:04:02 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1778,7 +1778,8 @@ ssl3_get_client_kex_rsa(SSL *s, CBS *cbs) | |||
1778 | static int | 1778 | static int |
1779 | ssl3_get_client_kex_dhe(SSL *s, CBS *cbs) | 1779 | ssl3_get_client_kex_dhe(SSL *s, CBS *cbs) |
1780 | { | 1780 | { |
1781 | int key_size = 0, key_len, al; | 1781 | int key_size = 0; |
1782 | int key_is_invalid, key_len, al; | ||
1782 | unsigned char *key = NULL; | 1783 | unsigned char *key = NULL; |
1783 | BIGNUM *bn = NULL; | 1784 | BIGNUM *bn = NULL; |
1784 | CBS dh_Yc; | 1785 | CBS dh_Yc; |
@@ -1809,9 +1810,20 @@ ssl3_get_client_kex_dhe(SSL *s, CBS *cbs) | |||
1809 | SSLerror(s, ERR_R_MALLOC_FAILURE); | 1810 | SSLerror(s, ERR_R_MALLOC_FAILURE); |
1810 | goto err; | 1811 | goto err; |
1811 | } | 1812 | } |
1813 | if (!DH_check_pub_key(dh, bn, &key_is_invalid)) { | ||
1814 | al = SSL_AD_INTERNAL_ERROR; | ||
1815 | SSLerror(s, ERR_R_DH_LIB); | ||
1816 | goto f_err; | ||
1817 | } | ||
1818 | if (key_is_invalid) { | ||
1819 | al = SSL_AD_ILLEGAL_PARAMETER; | ||
1820 | SSLerror(s, ERR_R_DH_LIB); | ||
1821 | goto f_err; | ||
1822 | } | ||
1812 | if ((key_len = DH_compute_key(key, bn, dh)) <= 0) { | 1823 | if ((key_len = DH_compute_key(key, bn, dh)) <= 0) { |
1824 | al = SSL_AD_INTERNAL_ERROR; | ||
1813 | SSLerror(s, ERR_R_DH_LIB); | 1825 | SSLerror(s, ERR_R_DH_LIB); |
1814 | goto err; | 1826 | goto f_err; |
1815 | } | 1827 | } |
1816 | 1828 | ||
1817 | s->session->master_key_length = tls1_generate_master_secret(s, | 1829 | s->session->master_key_length = tls1_generate_master_secret(s, |