diff options
author | jsing <> | 2020-02-16 16:36:40 +0000 |
---|---|---|
committer | jsing <> | 2020-02-16 16:36:40 +0000 |
commit | 5f232a5347aa50b02963840b94a44e39ca4a5d4d (patch) | |
tree | 5ad7d065edd1539e670f2b19b2c2833d83e60d0c /src | |
parent | 30dd34166845e9c6dd25a36682400e4e3a485065 (diff) | |
download | openbsd-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.c | 5 |
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; |