Make the checks for an SSLv2 style record stricter
authorMatt Caswell <matt@openssl.org>
Fri, 22 Jul 2016 13:58:19 +0000 (14:58 +0100)
committerMatt Caswell <matt@openssl.org>
Fri, 29 Jul 2016 11:42:40 +0000 (12:42 +0100)
commit0647719d809abdfe6b871949f4f75ce82da6616a
tree829a059b3d0b327c7e250c74059c6fd24753ec54
parent1a627771634adba9d4f3b5cf7be74d6bab428a5f
Make the checks for an SSLv2 style record stricter

SSLv2 is no longer supported in 1.1.0, however we *do* still accept an SSLv2
style ClientHello, as long as we then subsequently negotiate a protocol
version >= SSLv3. The record format for SSLv2 style ClientHellos is quite
different to SSLv3+. We only accept this format in the first record of an
initial ClientHello. Previously we checked this by confirming
s->first_packet is set and s->server is true. However, this really only
tells us that we are dealing with an initial ClientHello, not that it is
the first record (s->first_packet is badly named...it really means this is
the first message). To check this is the first record of the initial
ClientHello we should also check that we've not received any data yet
(s->init_num == 0), and that we've not had any empty records.

GitHub Issue #1298

Reviewed-by: Emilia Käsper <emilia@openssl.org>
ssl/record/ssl3_record.c