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

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

krb5 commit: Fix two KDB data validation issues

daemon@ATHENA.MIT.EDU (ghudson@mit.edu)
Fri Oct 30 13:01:43 2026

From: ghudson@mit.edu
To: cvs-krb5@mit.edu
Message-Id: <20261030065126.6B466105832@krbdev.mit.edu>
Date: Fri, 30 Oct 2026 02:51:26 -0400 (EDT)
MIME-Version: 1.0
Reply-To: krbdev@mit.edu
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu

https://github.com/krb5/krb5/commit/48adb434dfd4807fc84187e46bf09ef4ee42377c
commit 48adb434dfd4807fc84187e46bf09ef4ee42377c
Author: Bogdan Boguslavskij <bogdanb@altlinux.org>
Date:   Fri Sep 4 12:46:23 2026 +0300

    Fix two KDB data validation issues
    
    In the LMDB KDB module, fix a bug in klmdb_decode_princ() that
    renders the key_data_ver validity check inoperable.
    
    In the DB2 KDB module, bounds-check entry->e_length against the
    remaining record data, and decrease sizeleft when we increase nextloc.
    
    [ghudson@mit.edu: combined two commits and rewrote commit message]
    
    ticket: 9250 (new)
    tags: pullup
    target_version: 1.22-next

 src/plugins/kdb/db2/kdb_xdr.c  | 5 +++++
 src/plugins/kdb/lmdb/marshal.c | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/plugins/kdb/db2/kdb_xdr.c b/src/plugins/kdb/db2/kdb_xdr.c
index 054a87a37..b4666a95b 100644
--- a/src/plugins/kdb/db2/kdb_xdr.c
+++ b/src/plugins/kdb/db2/kdb_xdr.c
@@ -313,10 +313,15 @@ krb5_decode_princ_entry(krb5_context context, krb5_data *content,
     /* Check for extra data */
     if (entry->len > KRB5_KDB_V1_BASE_LENGTH) {
         entry->e_length = entry->len - KRB5_KDB_V1_BASE_LENGTH;
+        if (entry->e_length > (size_t)sizeleft) {
+            retval = KRB5_KDB_TRUNCATED_RECORD;
+            goto error_out;
+        }
         entry->e_data = k5memdup(nextloc, entry->e_length, &retval);
         if (entry->e_data == NULL)
             goto error_out;
         nextloc += entry->e_length;
+        sizeleft -= entry->e_length;
     }
 
     /*
diff --git a/src/plugins/kdb/lmdb/marshal.c b/src/plugins/kdb/lmdb/marshal.c
index 433bb816d..5aab37491 100644
--- a/src/plugins/kdb/lmdb/marshal.c
+++ b/src/plugins/kdb/lmdb/marshal.c
@@ -215,7 +215,7 @@ klmdb_decode_princ(krb5_context context, const void *key, size_t key_len,
         kd = &entry->key_data[i];
         kd->key_data_ver = k5_input_get_uint16_le(&in);
         kd->key_data_kvno = k5_input_get_uint16_le(&in);
-        if (kd->key_data_ver < 0 &&
+        if (kd->key_data_ver < 0 ||
             kd->key_data_ver > KRB5_KDB_V1_KEY_DATA_ARRAY) {
             ret = KRB5_KDB_BAD_VERSION;
             goto cleanup;
_______________________________________________
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