]> 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)
committerGreg Hudson <ghudson@mit.edu>
Wed, 27 Jan 2016 20:43:27 +0000 (15:43 -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

ticket: 8341 (new)
target_version: 1.14-next
target_version: 1.13-next
tags: pullup

src/lib/kadm5/kadm_rpc_xdr.c

index 2bef8586312fc59c11b0b88122b53be0ecc82a6f..ba670841056f1ede0929281e28e61e722e1fa990 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)