kadmind frees invalid pointer [MITKRB5-SA-2011-004 CVE-2011-0285]
authorTom Yu <tlyu@mit.edu>
Thu, 14 Apr 2011 22:17:10 +0000 (22:17 +0000)
committerTom Yu <tlyu@mit.edu>
Thu, 14 Apr 2011 22:17:10 +0000 (22:17 +0000)
back-port r24878 for 1.7-branch

 ------------------------------------------------------------------------
 r24878 | tlyu | 2011-04-13 14:43:37 -0400 (Wed, 13 Apr 2011) | 11 lines

 ticket: 6899
 tags: pullup
 target_version: 1.9.1

 Fix the sole case in process_chpw_request() where a return could occur
 without allocating the data pointer in the response.  This prevents a
 later free() of an invalid pointer in kill_tcp_or_rpc_connection().

 Also initialize rep->data to NULL in process_chpw_request() and clean
 up *response in dispatch() as an additional precaution.

ticket: 6901
status: resolved
version_fixed: 1.7.2

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-7@24881 dc483132-0cff-0310-8789-dd5450dbe970

src/kadmin/server/network.c
src/kadmin/server/schpw.c

index df3f01cf063b37326a3e7c9561f5c41602db9f4a..0ea2e5027408236305fca20de2a89c96a0b5f8ee 100644 (file)
@@ -1351,6 +1351,10 @@ cleanup:
     if (local_kaddrs != NULL)
        krb5_free_addresses(server_handle->context, local_kaddrs);
 
+    if ((*response)->data == NULL) {
+        free(*response);
+        *response = NULL;
+    }
     krb5_kt_close(server_handle->context, kt);
 
     return ret;
index c3b7fa1e3e69d4b408eeb540a29ab9a620a11d49..0cd28a0f9fb009f40fc06cd1fac278f4f7ef6279 100644 (file)
@@ -73,8 +73,13 @@ process_chpw_request(context, server_handle, realm, keytab,
     plen = (*ptr++ & 0xff);
     plen = (plen<<8) | (*ptr++ & 0xff);
 
-    if (plen != req->length)
-       return(KRB5KRB_AP_ERR_MODIFIED);
+    if (plen != req->length) {
+        ret = KRB5KRB_AP_ERR_MODIFIED;
+        numresult = KRB5_KPASSWD_MALFORMED;
+        strlcpy(strresult, "Request length was inconsistent",
+                sizeof(strresult));
+        goto chpwfail;
+    }
 
     /* verify version number */