summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2020-06-01 08:04:02 +0000
committertb <>2020-06-01 08:04:02 +0000
commit3ba939cf288194f330bab0830f7d8328d9309fdb (patch)
treec1e5b705d23cf6a85e3072ffb48c3f7463ae92c3 /src
parent2a9f5cdb5b5312ddcf16e99a09e164730495d0a0 (diff)
downloadopenbsd-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.c18
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)
1778static int 1778static int
1779ssl3_get_client_kex_dhe(SSL *s, CBS *cbs) 1779ssl3_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,