Reject elliptic curve lists of odd lengths.
authorEmilia Kasper <emilia@openssl.org>
Mon, 1 Dec 2014 14:04:02 +0000 (15:04 +0100)
committerEmilia Kasper <emilia@openssl.org>
Fri, 5 Dec 2014 15:44:20 +0000 (16:44 +0100)
The Supported Elliptic Curves extension contains a vector of NamedCurves
of 2 bytes each, so the total length must be even. Accepting odd-length
lists was observed to lead to a non-exploitable one-byte out-of-bounds
read in the latest development branches (1.0.2 and master). Released
versions of OpenSSL are not affected.

Thanks to Felix Groebert of the Google Security Team for reporting this issue.

Reviewed-by: Matt Caswell <matt@openssl.org>
(cherry picked from commit 33d5ba862939ff8db70a9e36fc9a326fab3e8d98)

ssl/t1_lib.c

index c91489da6f728a765721b5a501d324b9f513ce6c..1a5f4c1c230fcb68abca6d8fc66f1315ab1f4127 100644 (file)
@@ -1199,7 +1199,9 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, in
                        ellipticcurvelist_length += (*(sdata++));
 
                        if (ellipticcurvelist_length != size - 2 ||
-                               ellipticcurvelist_length < 1)
+                               ellipticcurvelist_length < 1 ||
+                               /* Each NamedCurve is 2 bytes. */
+                               ellipticcurvelist_length & 1)
                                {
                                *al = TLS1_AD_DECODE_ERROR;
                                return 0;