krb5 commit: Fix read overflow in KDC sort_pa_data()

Greg Hudson <[email protected]>
Newsgroups gmane.comp.encryption.kerberos.cvs
Message-ID <[email protected]>
https://github.com/krb5/krb5/commit/b38e318cea18fd65647189eed64aef83bf1cb772
commit b38e318cea18fd65647189eed64aef83bf1cb772
Author: Greg Hudson <[email protected]>
Date:   Thu Mar 15 20:27:30 2018 -0400

    Fix read overflow in KDC sort_pa_data()
    
    sort_pa_data() could read past the end of pa_order if all preauth
    systems in the table have the PA_REPLACES_KEY flag, causing a
    dereference of preauth_systems[-1].  This situation became possible
    after commit fea1a488924faa3938ef723feaa1ff12d22a91ff with the
    elimination of static_preauth_systems; before that there were always
    table entries which did not have PA_REPLACES_KEY set.
    
    Fix this bug by removing the loop to count n_key_replacers, and
    instead get the count from the prior loop by stopping once we move all
    of the key-replacing modules to the front.

 src/kdc/kdc_preauth.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/kdc/kdc_preauth.c b/src/kdc/kdc_preauth.c
index 6f34dc2..fdf67d9 100644
--- a/src/kdc/kdc_preauth.c
+++ b/src/kdc/kdc_preauth.c
@@ -598,17 +598,18 @@ sort_pa_order(krb5_context context, krb5_kdc_req *request, int *pa_order)
                 break;
             }
         }
+        /* If we didn't find one, we have moved all of the key-replacing
+         * modules, and i is the count of those modules. */
+        if (j == n_repliers)
+            break;
     }
+    n_key_replacers = i;
 
     if (request->padata != NULL) {
         /* Now reorder the subset of modules which replace the key,
          * bubbling those which handle pa_data types provided by the
          * client ahead of the others.
          */
-        for (i = 0; preauth_systems[pa_order[i]].flags & PA_REPLACES_KEY; i++) {
-            continue;
-        }
-        n_key_replacers = i;
         for (i = 0; i < n_key_replacers; i++) {
             if (pa_list_includes(request->padata,
                                  preauth_systems[pa_order[i]].type))
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.