[3191] in Kerberos-V5-bugs

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

krb5-libs/936: krb5_c_decrypt does not understand similarity between des keys

daemon@ATHENA.MIT.EDU (assar@sics.se)
Mon Mar 26 01:09:10 2001

Resent-From: gnats@rt-11.mit.edu (GNATS Management)
Resent-To: krb5-unassigned@rt-11.mit.edu
Resent-Reply-To: krb5-bugs@MIT.EDU, assar@sics.se
Message-Id: <200103260608.f2Q68fa285132@ratatosk.pdc.kth.se>
Date: Mon, 26 Mar 2001 08:08:41 +0200 (CEST)
From: assar@sics.se
To: krb5-bugs@mit.edu
Cc: hartmans@mit.edu


>Number:         936
>Category:       krb5-libs
>Synopsis:       krb5_c_decrypt does not understand similarity between des keys
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    krb5-unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   unknown
>Arrival-Date:   Mon Mar 26 01:09:00 EST 2001
>Last-Modified:
>Originator:     Assar Westerlund
>Organization:
heimdal hackers
>Release:        krb5-1.2.2
>Environment:
	any
>Description:

krb5_c_decrypt (and thus lots of other stuff), does not understand
that you can use a DES key to decrypt any des-encrypted data
independent of the checksum applied.  This causes lots of stuff to
fail, even when there's a perfectly fine key.

>How-To-Repeat:
>Fix:

--- decrypt.c~	Wed Feb 28 23:07:29 2001
+++ decrypt.c	Sun Mar  4 08:44:55 2001
@@ -37,6 +37,7 @@
      krb5_data *output;
 {
     int i;
+    const struct krb5_keytypes *enctype;
 
     for (i=0; i<krb5_enctypes_length; i++) {
 	if (krb5_enctypes_list[i].etype == key->enctype)
@@ -46,11 +47,26 @@
     if (i == krb5_enctypes_length)
 	return(KRB5_BAD_ENCTYPE);
 
-    if ((input->enctype != ENCTYPE_UNKNOWN) &&
-	(krb5_enctypes_list[i].etype != input->enctype))
+    enctype = &krb5_enctypes_list[i];
+
+    if (input->enctype != ENCTYPE_UNKNOWN) {
+	int j;
+
+	for (j=0; j<krb5_enctypes_length; j++) {
+	    if (krb5_enctypes_list[j].etype == input->enctype)
+		break;
+	}
+
+	if (j == krb5_enctypes_length)
 	return(KRB5_BAD_ENCTYPE);
 
-    return((*(krb5_enctypes_list[i].decrypt))
-	   (krb5_enctypes_list[i].enc, krb5_enctypes_list[i].hash,
+	if (enctype->enc != krb5_enctypes_list[j].enc)
+	    return(KRB5_BAD_ENCTYPE);
+
+	enctype = &krb5_enctypes_list[j];
+    }
+
+    return((*(enctype->decrypt))
+	   (enctype->enc, enctype->hash,
 	    key, usage, ivec, &input->ciphertext, output));
 }
>Audit-Trail:
>Unformatted:

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