mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-27 04:54:15 +01:00
Countermeasure against "triple handshake" attack
This commit is contained in:
parent
397858b81d
commit
963918b88f
@ -4,6 +4,11 @@ PolarSSL ChangeLog
|
|||||||
Changes
|
Changes
|
||||||
* Introduced POLARSSL_HAVE_READDIR_R for systems without it
|
* Introduced POLARSSL_HAVE_READDIR_R for systems without it
|
||||||
|
|
||||||
|
Security
|
||||||
|
* Forbid change of server certificate during renegotiation to prevent
|
||||||
|
"triple handshake" attack when authentication mode is optional (the
|
||||||
|
attack was already impossible when authentication is required).
|
||||||
|
|
||||||
Bugfix
|
Bugfix
|
||||||
* Fixed X.509 hostname comparison (with non-regular characters)
|
* Fixed X.509 hostname comparison (with non-regular characters)
|
||||||
* SSL now gracefully handles missing RNG
|
* SSL now gracefully handles missing RNG
|
||||||
|
@ -2402,6 +2402,30 @@ int ssl_parse_certificate( ssl_context *ssl )
|
|||||||
|
|
||||||
SSL_DEBUG_CRT( 3, "peer certificate", ssl->session_negotiate->peer_cert );
|
SSL_DEBUG_CRT( 3, "peer certificate", ssl->session_negotiate->peer_cert );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On client, make sure the server cert doesn't change during renego to
|
||||||
|
* avoid "triple handshake" attack: https://secure-resumption.com/
|
||||||
|
*/
|
||||||
|
if( ssl->endpoint == SSL_IS_CLIENT &&
|
||||||
|
ssl->renegotiation == SSL_RENEGOTIATION )
|
||||||
|
{
|
||||||
|
if( ssl->session->peer_cert == NULL )
|
||||||
|
{
|
||||||
|
SSL_DEBUG_MSG( 1, ( "new server cert during renegotiation" ) );
|
||||||
|
return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ssl->session->peer_cert->raw.len !=
|
||||||
|
ssl->session_negotiate->peer_cert->raw.len ||
|
||||||
|
memcmp( ssl->session->peer_cert->raw.p,
|
||||||
|
ssl->session_negotiate->peer_cert->raw.p,
|
||||||
|
ssl->session->peer_cert->raw.len ) != 0 )
|
||||||
|
{
|
||||||
|
SSL_DEBUG_MSG( 1, ( "server cert changed during renegotiation" ) );
|
||||||
|
return( POLARSSL_ERR_SSL_BAD_HS_CERTIFICATE );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if( ssl->authmode != SSL_VERIFY_NONE )
|
if( ssl->authmode != SSL_VERIFY_NONE )
|
||||||
{
|
{
|
||||||
if( ssl->ca_chain == NULL )
|
if( ssl->ca_chain == NULL )
|
||||||
|
Loading…
Reference in New Issue
Block a user