Fix DTLS handshake message size checks.
authorMatt Caswell <matt@openssl.org>
Fri, 6 Jun 2014 21:25:52 +0000 (14:25 -0700)
committerMatt Caswell <matt@openssl.org>
Wed, 6 Aug 2014 19:27:51 +0000 (20:27 +0100)
commitfc7804ec392fcf8051abe6bc9da9108744d2ae35
treeeba3e0ca0d97c3e5187a5c0721ced4a1176b82f9
parente7b9d9be48cdc598a46c8e1536035ed29a9af254
Fix DTLS handshake message size checks.

In |dtls1_reassemble_fragment|, the value of
|msg_hdr->frag_off+frag_len| was being checked against the maximum
handshake message size, but then |msg_len| bytes were allocated for the
fragment buffer. This means that so long as the fragment was within the
allowed size, the pending handshake message could consume 16MB + 2MB
(for the reassembly bitmap). Approx 10 outstanding handshake messages
are allowed, meaning that an attacker could consume ~180MB per DTLS
connection.

In the non-fragmented path (in |dtls1_process_out_of_seq_message|), no
check was applied.

Fixes CVE-2014-3506

Wholly based on patch by Adam Langley with one minor amendment.

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