]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Verify decoded kadmin C strings [CVE-2015-8629]
authorGreg Hudson <ghudson@mit.edu>
Fri, 8 Jan 2016 17:45:25 +0000 (12:45 -0500)
committerTom Yu <tlyu@mit.edu>
Mon, 8 Feb 2016 22:57:38 +0000 (17:57 -0500)
In xdr_nullstring(), check that the decoded string is terminated with
a zero byte and does not contain any internal zero bytes.

CVE-2015-8629:

In all versions of MIT krb5, an authenticated attacker can cause
kadmind to read beyond the end of allocated memory by sending a string
without a terminating zero byte.  Information leakage may be possible
for an attacker with permission to modify the database.

    CVSSv2 Vector: AV:N/AC:H/Au:S/C:P/I:N/A:N/E:POC/RL:OF/RC:C

(cherry picked from commit df17a1224a3406f57477bcd372c61e04c0e5a5bb)

ticket: 8341
version_fixed: 1.13.4
tags: -pullup
status: resolved

src/lib/kadm5/kadm_rpc_xdr.c

index 975f94c6c6ac70491c945f36d4d108ff2102616c..6ccfcea3fb4c2895907e29d67fe312205ea380aa 100644 (file)
@@ -64,7 +64,14 @@ bool_t xdr_nullstring(XDR *xdrs, char **objp)
                    return FALSE;
               }
          }
-         return (xdr_opaque(xdrs, *objp, size));
+         if (!xdr_opaque(xdrs, *objp, size))
+                 return FALSE;
+         /* Check that the unmarshalled bytes are a C string. */
+         if ((*objp)[size - 1] != '\0')
+                 return FALSE;
+         if (memchr(*objp, '\0', size - 1) != NULL)
+                 return FALSE;
+         return TRUE;
 
      case XDR_ENCODE:
          if (size != 0)