]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Make RC4 string-to-key more robust 636/head
authorGreg Hudson <ghudson@mit.edu>
Sat, 15 Apr 2017 01:41:20 +0000 (21:41 -0400)
committerGreg Hudson <ghudson@mit.edu>
Mon, 17 Apr 2017 17:28:07 +0000 (13:28 -0400)
krb5int_utf8cs_to_ucs2les() can read slightly beyond the end of the
input buffer if the buffer ends with an invalid UTF-8 sequence.  When
computing the RC4 string-to-key result, make a zero-terminated copy of
the input string and use krb5int_utf8s_to_ucs2les() instead.

ticket: 8576 (new)
target_version: 1.15-next
target_version: 1.14-next
tags: pullup

src/lib/crypto/krb/s2k_rc4.c

index 49ad89d323b0f6629f23bad571934fdc2109df67..7286637a905bc0fbf91ba5561f2b3f6da965bfce 100644 (file)
@@ -10,6 +10,7 @@ krb5int_arcfour_string_to_key(const struct krb5_keytypes *ktp,
     krb5_error_code err = 0;
     krb5_crypto_iov iov;
     krb5_data hash_out;
+    char *utf8;
     unsigned char *copystr;
     size_t copystrlen;
 
@@ -20,8 +21,11 @@ krb5int_arcfour_string_to_key(const struct krb5_keytypes *ktp,
         return (KRB5_BAD_MSIZE);
 
     /* We ignore salt per the Microsoft spec. */
-    err = krb5int_utf8cs_to_ucs2les(string->data, string->length, &copystr,
-                                    &copystrlen);
+    utf8 = k5memdup0(string->data, string->length, &err);
+    if (utf8 == NULL)
+        return err;
+    err = krb5int_utf8s_to_ucs2les(utf8, &copystr, &copystrlen);
+    free(utf8);
     if (err)
         return err;