From 244c9681aed7b9fbdbd14842a79d686c83cc6db7 Mon Sep 17 00:00:00 2001 From: Steffan Karger Date: Thu, 20 Nov 2014 13:43:05 +0100 Subject: [PATCH] Drop too-short control channel packets instead of asserting out. This fixes a denial-of-service vulnerability where an authenticated client could stop the server by triggering a server-side ASSERT(). OpenVPN would previously ASSERT() that control channel packets have a payload of at least 4 bytes. An authenticated client could trigger this assert by sending a too-short control channel packet to the server. Thanks to Dragana Damjanovic for reporting the issue. This bug has been assigned CVE-2014-8104. Signed-off-by: Steffan Karger Acked-by: Gert Doering Message-Id: <1CED409804E2164C8104F9E623B08B9018803B0FE7@FOXDFT02.FOX.local> Signed-off-by: Gert Doering (cherry picked from commit c5590a6821e37f3b29735f55eb0c2b9c0924138c) --- ssl.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ssl.c b/ssl.c index a14064162..43622ebe6 100644 --- a/ssl.c +++ b/ssl.c @@ -3598,7 +3598,11 @@ key_method_2_read (struct buffer *buf, struct tls_multi *multi, struct tls_sessi ALLOC_ARRAY_CLEAR_GC (options, char, TLS_OPTIONS_LEN, &gc); /* discard leading uint32 */ - ASSERT (buf_advance (buf, 4)); + if (!buf_advance (buf, 4)) { + msg (D_TLS_ERRORS, "TLS ERROR: Plaintext buffer too short (%d bytes).", + buf->len); + goto error; + } /* get key method */ key_method_flags = buf_read_u8 (buf); -- 2.47.2