]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Drop too-short control channel packets instead of asserting out.
authorSteffan Karger <steffan.karger@fox-it.com>
Thu, 20 Nov 2014 12:43:05 +0000 (13:43 +0100)
committerGert Doering <gert@greenie.muc.de>
Fri, 28 Nov 2014 19:28:53 +0000 (20:28 +0100)
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 <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1CED409804E2164C8104F9E623B08B9018803B0FE7@FOXDFT02.FOX.local>
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/ssl.c

index 2adfa26fbeb082000ae44622b8279be3e1ce19cc..cdc8eb198488eec55697b401a589e8ef084836a1 100644 (file)
@@ -2036,7 +2036,11 @@ key_method_2_read (struct buffer *buf, struct tls_multi *multi, struct tls_sessi
   ASSERT (session->opt->key_method == 2);
 
   /* 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);