diff --git a/ChangeLog b/ChangeLog index cd003940a..19180e9dc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15,6 +15,11 @@ Bugfix * Fix a miscalculation of the maximum record expansion in mbedtls_ssl_get_record_expansion() in case of CBC ciphersuites in (D)TLS versions 1.1 or higher. Fixes #1914. + * Fix a bug that caused SSL/TLS clients to incorrectly abort the handshake + with TLS versions 1.1 and earlier when the server requested authentication + without providing a list of CAs. This was due to an overly strict bounds + check in parsing the CertificateRequest message, + introduced in Mbed TLS 2.12.0. Fixes #1954. = mbed TLS 2.1.14 branch released 2018-07-25 diff --git a/library/ssl_cli.c b/library/ssl_cli.c index 916a29cad..4d8288e54 100644 --- a/library/ssl_cli.c +++ b/library/ssl_cli.c @@ -2504,7 +2504,7 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) * therefore the buffer length at this point must be greater than that * regardless of the actual code path. */ - if( ssl->in_hslen <= mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n ) + if( ssl->in_hslen <= mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); diff --git a/tests/ssl-opt.sh b/tests/ssl-opt.sh index 9a432fb0b..ec9e75aa3 100755 --- a/tests/ssl-opt.sh +++ b/tests/ssl-opt.sh @@ -656,6 +656,22 @@ run_test "RC4: both enabled" \ -S "SSL - None of the common ciphersuites is usable" \ -S "SSL - The server has no ciphersuites in common" +# Test empty CA list in CertificateRequest in TLS 1.1 and earlier + +requires_gnutls +requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_1 +run_test "CertificateRequest with empty CA list, TLS 1.1 (GnuTLS server)" \ + "$G_SRV"\ + "$P_CLI force_version=tls1_1" \ + 0 + +requires_gnutls +requires_config_enabled MBEDTLS_SSL_PROTO_TLS1 +run_test "CertificateRequest with empty CA list, TLS 1.0 (GnuTLS server)" \ + "$G_SRV"\ + "$P_CLI force_version=tls1" \ + 0 + # Tests for SHA-1 support requires_config_disabled MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES