Don't change the state of the ETM flags until CCS processing
authorMatt Caswell <matt@openssl.org>
Fri, 3 Feb 2017 14:06:20 +0000 (14:06 +0000)
committerMatt Caswell <matt@openssl.org>
Thu, 16 Feb 2017 09:39:06 +0000 (09:39 +0000)
commit4ad93618d26a3ea23d36ad5498ff4f59eff3a4d2
treecf50c7a4eaaf7620c3decf0d116d5c0b08523e1b
parent9c5a691d578a4debfd6ecacc030a85900906bf0d
Don't change the state of the ETM flags until CCS processing

Changing the ciphersuite during a renegotiation can result in a crash
leading to a DoS attack. ETM has not been implemented in 1.1.0 for DTLS
so this is TLS only.

The problem is caused by changing the flag indicating whether to use ETM
or not immediately on negotiation of ETM, rather than at CCS. Therefore,
during a renegotiation, if the ETM state is changing (usually due to a
change of ciphersuite), then an error/crash will occur.

Due to the fact that there are separate CCS messages for read and write
we actually now need two flags to determine whether to use ETM or not.

CVE-2017-3733

Reviewed-by: Richard Levitte <levitte@openssl.org>
include/openssl/ssl3.h
ssl/record/rec_layer_s3.c
ssl/record/ssl3_record.c
ssl/ssl_locl.h
ssl/t1_enc.c
ssl/t1_lib.c