mbedtls/library
Manuel Pégourié-Gonnard 731d7c0dcc
Fix lack of cookie check on hard reconnect
Section 4.2.8 of RFC 6347 describes how to handle the case of a DTLS client
establishing a new connection using the same UDP quartet as an already active
connection, which we implement under the compile option
MBEDTLS_SSL_DLTS_CLIENT_PORT_REUSE. Relevant excerpts:

    [the server] MUST NOT destroy the existing
    association until the client has demonstrated reachability either by
    completing a cookie exchange or by completing a complete handshake
    including delivering a verifiable Finished message.
    [...]
    The reachability requirement prevents
    off-path/blind attackers from destroying associations merely by
    sending forged ClientHellos.

Our code chooses to use a cookie exchange for establishing reachability, but
unfortunately that check was effectively removed in a recent refactoring,
which changed what value ssl_handle_possible_reconnect() needs to return in
order for ssl_get_next_record() (introduced in that refactoring) to take the
proper action. Unfortunately, in addition to changing the value, the
refactoring also changed a return statement to an assignment to the ret
variable, causing the function to reach the code for a valid cookie, which
immediately destroys the existing association, effectively bypassing the
cookie verification.

This commit fixes that by immediately returning after sending a
HelloVerifyRequest when a ClientHello without a valid cookie is found. It also
updates the description of the function to reflect the new return value
convention (the refactoring updated the code but not the documentation).

The commit that changed the return value convention (and introduced the bug)
is 2fddd3765e, whose commit message explains the
change.

Note: this bug also indirectly caused the ssl-opt.sh test case "DTLS client
reconnect from same port: reconnect" to occasionally fail due to a race
condition between the reception of the ClientHello carrying a valid cookie and
the closure of the connection by the server after noticing the ClientHello
didn't carry a valid cookie after it incorrectly destroyed the previous
connection, that could cause that ClientHello to be invisible to the server
(if that message reaches the server just before it does `net_close()`). A
welcome side effect of this commit is to remove that race condition, as the
new connection will immediately start with a ClientHello carrying a valid
cookie in the SSL input buffer, so the server will not call `net_close()` and
not risk discarding a better ClientHello that arrived in the meantime.

Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
2020-05-21 10:12:25 -04:00
..
.gitignore Split libs with make + general make cleanups 2015-06-25 10:59:56 +02:00
aes.c Zeroize local AES variables before exiting the function 2020-03-13 15:27:12 +00:00
aesni.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
arc4.c Changed mbedtls_platform_memcpy back to memcpy for selftest and test functions 2019-10-30 14:07:04 +02:00
aria.c Changed mbedtls_platform_memset/cpy/cmp in selftest functions back to original methods 2019-10-30 14:07:04 +02:00
asn1parse.c Merge remote-tracking branch 'public/pr/2877' into baremetal 2019-10-23 14:53:29 +01:00
asn1write.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
base64.c Changed every memcmp to SCA equivalent mbedtls_platform_memcmp 2019-10-03 13:14:33 +03:00
bignum.c Minor comment improvement 2020-03-13 16:23:45 +00:00
blowfish.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
camellia.c Changed mbedtls_platform_memset/cpy/cmp in selftest functions back to original methods 2019-10-30 14:07:04 +02:00
ccm.c Changed mbedtls_platform_memset/cpy/cmp in selftest functions back to original methods 2019-10-30 14:07:04 +02:00
certs.c Fixup certs.c: Remove redundant TinyCrypt guard 2019-09-04 16:19:49 +01:00
chacha20.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
chachapoly.c Replace memset() with mbedtls_platform_memset() 2019-10-22 10:03:07 +02:00
cipher.c Remove redundant block_size validity check 2020-03-13 15:37:54 +00:00
cipher_wrap.c Consistently use (type *) instead of (type*) for pointer conversion 2019-06-25 09:10:57 +01:00
cmac.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
CMakeLists.txt Merge mbedtls 2.16.6 into baremetal 2020-05-18 11:47:25 -04:00
ctr_drbg.c Catch AES failure in mbedtls_ctr_drbg_random 2020-03-13 15:36:04 +00:00
debug.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
des.c Changed mbedtls_platform_memcpy back to memcpy for selftest and test functions 2019-10-30 14:07:04 +02:00
dhm.c Replace memset() with mbedtls_platform_memset() 2019-10-22 10:03:07 +02:00
ecdh.c Replace memset() with mbedtls_platform_memset() 2019-10-22 10:03:07 +02:00
ecdsa.c Fix incrementing pointer instead of value 2020-03-13 15:37:54 +00:00
ecjpake.c Changed mbedtls_platform_memset/cpy/cmp in selftest functions back to original methods 2019-10-30 14:07:04 +02:00
ecp.c Merge mbedtls 2.16.6 into baremetal 2020-05-18 11:47:25 -04:00
ecp_curves.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
entropy.c Update signature of mbedtls_platform_random_delay 2020-01-09 10:19:07 +02:00
entropy_poll.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
error.c Fix mbedtls_strerror to work with all wanted codes 2020-01-09 14:22:32 +02:00
gcm.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
havege.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
hkdf.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
hmac_drbg.c HMAC_DRBG: support set_entropy_len() before seed() 2020-03-13 15:24:20 +00:00
Makefile Add Makefile option to exclude TinyCrypt files 2019-11-22 15:09:39 +00:00
md.c Include platform.h in hmac_drbg.c and md.c 2019-11-25 17:32:28 +02:00
md2.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
md4.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
md5.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
memory_buffer_alloc.c Replace memset() with mbedtls_platform_memset() 2019-10-22 10:03:07 +02:00
net_sockets.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
nist_kw.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
oid.c Changed every memcmp to SCA equivalent mbedtls_platform_memcmp 2019-10-03 13:14:33 +03:00
padlock.c Added include platform_util.h to padlock.c to fix compile with all defines variants 2019-10-30 14:07:04 +02:00
pem.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
pk.c Update signature of mbedtls_platform_random_delay 2020-01-09 10:19:07 +02:00
pkcs5.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
pkcs11.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
pkcs12.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
pkparse.c Merge mbedtls 2.16.6 into baremetal 2020-05-18 11:47:25 -04:00
pkwrite.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
platform.c Omit runtime configuration of calloc/free if macro config enabled 2018-10-11 11:04:20 +01:00
platform_util.c Rename macro MBEDTLS_MAX_RAND_DELAY 2020-01-09 11:11:23 +02:00
poly1305.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
ripemd160.c Changed mbedtls_platform_memset/cpy/cmp in selftest functions back to original methods 2019-10-30 14:07:04 +02:00
rsa.c Parse RSA parameters DP, DQ and QP from PKCS1 private keys 2020-03-13 16:21:44 +00:00
rsa_internal.c Bignum: Deprecate mbedtls_mpi_is_prime() 2018-10-09 16:36:53 +01:00
sha1.c Changed mbedtls_platform_memset/cpy/cmp in selftest functions back to original methods 2019-10-30 14:07:04 +02:00
sha256.c Protect get/put on secret data on sha256-module 2020-01-08 10:45:51 +02:00
sha512.c Changed mbedtls_platform_memset/cpy/cmp in selftest functions back to original methods 2019-10-30 14:07:04 +02:00
ssl_cache.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
ssl_ciphersuites.c Fixup: Add missing TinyCrypt guards 2019-09-04 16:17:45 +01:00
ssl_cli.c Merge mbedtls 2.16.6 into baremetal 2020-05-18 11:47:25 -04:00
ssl_cookie.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
ssl_srv.c Update signature of mbedtls_platform_random_delay 2020-01-09 10:19:07 +02:00
ssl_ticket.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
ssl_tls.c Fix lack of cookie check on hard reconnect 2020-05-21 10:12:25 -04:00
threading.c Don't declare and define gmtime()-mutex on Windows platforms 2018-09-06 12:09:56 +01:00
timing.c timing: Remove redundant include file 2019-06-20 16:33:02 +01:00
version.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
version_features.c Move MBEDTLS_CTR_DRBG_USE_128_BIT_KEY to the correct section 2020-03-13 15:22:14 +00:00
x509.c Merge mbedtls 2.16.6 into baremetal 2020-05-18 11:47:25 -04:00
x509_create.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
x509_crl.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
x509_crt.c Merge mbedtls 2.16.6 into baremetal 2020-05-18 11:47:25 -04:00
x509_csr.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
x509write_crt.c Changed every memcpy to SCA equivalent mbedtls_platform_memcpy 2019-10-30 14:07:04 +02:00
x509write_csr.c Add missing return code check on call to mbedtls_md() 2020-03-13 15:36:05 +00:00
xtea.c Changed mbedtls_platform_memcpy back to memcpy for selftest and test functions 2019-10-30 14:07:04 +02:00