summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2020-02-16 16:36:40 +0000
committerjsing <>2020-02-16 16:36:40 +0000
commit5f232a5347aa50b02963840b94a44e39ca4a5d4d (patch)
tree5ad7d065edd1539e670f2b19b2c2833d83e60d0c /src
parent30dd34166845e9c6dd25a36682400e4e3a485065 (diff)
downloadopenbsd-5f232a5347aa50b02963840b94a44e39ca4a5d4d.tar.gz
openbsd-5f232a5347aa50b02963840b94a44e39ca4a5d4d.tar.bz2
openbsd-5f232a5347aa50b02963840b94a44e39ca4a5d4d.zip
Avoid potential NULL dereference when parsing a server keyshare extension.
It is currently possible for key_share to be NULL when a TLS client receives a keyshare extension. However, for this to occur the client has to be doing TLS 1.2 or earlier, which means that it was invalid for the server to send the extension. As such, check for NULL and treat it as an invalid extension. Found by oss-fuzz (#20741 and #20745). ok inoguchi@ tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libssl/ssl_tlsext.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c
index 3d1d1c8b7b..f907741514 100644
--- a/src/lib/libssl/ssl_tlsext.c
+++ b/src/lib/libssl/ssl_tlsext.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_tlsext.c,v 1.60 2020/02/06 13:14:17 jsing Exp $ */ 1/* $OpenBSD: ssl_tlsext.c,v 1.61 2020/02/16 16:36:40 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> 4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
@@ -1349,6 +1349,9 @@ tlsext_keyshare_client_parse(SSL *s, CBS *cbs, int *alert)
1349 if (!CBS_get_u16_length_prefixed(cbs, &key_exchange)) 1349 if (!CBS_get_u16_length_prefixed(cbs, &key_exchange))
1350 return 0; 1350 return 0;
1351 1351
1352 if (S3I(s)->hs_tls13.key_share == NULL)
1353 return 0;
1354
1352 if (!tls13_key_share_peer_public(S3I(s)->hs_tls13.key_share, 1355 if (!tls13_key_share_peer_public(S3I(s)->hs_tls13.key_share,
1353 group, &key_exchange)) 1356 group, &key_exchange))
1354 goto err; 1357 goto err;