[29277] in CVS-changelog-for-Kerberos-V5

home help back first fref pref prev next nref lref last post

krb5 commit [krb5-1.14]: Verify decoded kadmin C strings

daemon@ATHENA.MIT.EDU (Tom Yu)
Mon Feb 8 17:44:25 2016

Date: Mon, 8 Feb 2016 17:44:21 -0500
From: Tom Yu <tlyu@mit.edu>
Message-Id: <201602082244.u18MiLU8002164@drugstore.mit.edu>
To: cvs-krb5@mit.edu
Reply-To: krbdev@mit.edu
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu

https://github.com/krb5/krb5/commit/54a9a01c6a923d604cd06f321b8381ebc5cb42d8
commit 54a9a01c6a923d604cd06f321b8381ebc5cb42d8
Author: Greg Hudson <ghudson@mit.edu>
Date:   Fri Jan 8 12:45:25 2016 -0500

    Verify decoded kadmin C strings [CVE-2015-8629]
    
    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.14.1

 src/lib/kadm5/kadm_rpc_xdr.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/src/lib/kadm5/kadm_rpc_xdr.c b/src/lib/kadm5/kadm_rpc_xdr.c
index 2bef858..ba67084 100644
--- a/src/lib/kadm5/kadm_rpc_xdr.c
+++ b/src/lib/kadm5/kadm_rpc_xdr.c
@@ -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)
_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5

home help back first fref pref prev next nref lref last post