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

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

krb5 commit: Remove unsafe principal parsing from Leashdll

daemon@ATHENA.MIT.EDU (ghudson@mit.edu)
Mon Nov 9 11:59:15 2026

From: ghudson@mit.edu
To: cvs-krb5@mit.edu
Message-Id: <20261109165907.88029105814@krbdev.mit.edu>
Date: Mon,  9 Nov 2026 11:59:07 -0500 (EST)
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/54b7bbe13dd1d4d2646c4fbcc8d68925603924fb
commit 54b7bbe13dd1d4d2646c4fbcc8d68925603924fb
Author: Greg Hudson <ghudson@mit.edu>
Date:   Sat Sep 19 21:30:00 2026 -0400

    Remove unsafe principal parsing from Leashdll
    
    In Leash_int_kinit_ex(), remove the code to parse and reassemble the
    principal name; it has no length checks and could overflow
    stack-allocated buffers if a long principal name is supplied.  This
    parsing code was used to perform krb4 fallbacks if getting tickets via
    krb5 failed, and is no longer useful.
    
    Discovered by Aisle Research.
    
    ticket: 9241 (new)
    tags: pullup
    target_version: 1.22-next

 src/windows/leashdll/lshfunc.c | 82 ++++--------------------------------------
 1 file changed, 7 insertions(+), 75 deletions(-)

diff --git a/src/windows/leashdll/lshfunc.c b/src/windows/leashdll/lshfunc.c
index 14cb361db..c6904fcca 100644
--- a/src/windows/leashdll/lshfunc.c
+++ b/src/windows/leashdll/lshfunc.c
@@ -457,19 +457,8 @@ Leash_int_kinit_ex(
     int displayErrors
     )
 {
-    char    aname[ANAME_SZ];
-    char    inst[INST_SZ];
-    char    realm[REALM_SZ];
-    char    first_part[256];
-    char    second_part[256];
-    char    temp[1024];
     char*   custom_msg;
-    int     count;
-    int     i;
-    int rc5 = 0;
-    int rcA = 0;
-    int rcB = 0;
-    int rcL = 0;
+    int     count, i, r, rc;
 
     if (lifetime < 5)
         lifetime = 1;
@@ -487,70 +476,13 @@ Leash_int_kinit_ex(
     if (lifetime > 255)
         lifetime = 255;
 
-    err_context = "parsing principal";
-
-    memset(temp, '\0', sizeof(temp));
-    memset(inst, '\0', sizeof(inst));
-    memset(realm, '\0', sizeof(realm));
-    memset(first_part, '\0', sizeof(first_part));
-    memset(second_part, '\0', sizeof(second_part));
-
-    sscanf(principal, "%[/0-9a-zA-Z._-]@%[/0-9a-zA-Z._-]", first_part, second_part);
-    strcpy(temp, first_part);
-    strcpy(realm, second_part);
-    memset(first_part, '\0', sizeof(first_part));
-    memset(second_part, '\0', sizeof(second_part));
-    if (sscanf(temp, "%[@0-9a-zA-Z._-]/%[@0-9a-zA-Z._-]", first_part, second_part) == 2)
-    {
-        strcpy(aname, first_part);
-        strcpy(inst, second_part);
-    }
-    else
-    {
-        count = 0;
-        i = 0;
-        for (i = 0; temp[i]; i++)
-        {
-            if (temp[i] == '.')
-                ++count;
-        }
-        if (count > 1)
-        {
-            strcpy(aname, temp);
-        }
-        else
-        {
-            {
-                strcpy(aname, temp);
-            }
-        }
-    }
-
-    memset(temp, '\0', sizeof(temp));
-    strcpy(temp, aname);
-    if (strlen(inst) != 0)
-    {
-        strcat(temp, "/");
-        strcat(temp, inst);
-    }
-    if (strlen(realm) != 0)
-    {
-        strcat(temp, "@");
-        strcat(temp, realm);
-    }
-
-    rc5 = Leash_krb5_kinit(ctx, hParent,
-                            temp, password, lifetime,
-                            forwardable,
-                            proxiable,
-                            renew_life,
-                            addressless,
-                            publicip
-                            );
-    custom_msg = (rc5 == KRB5KRB_AP_ERR_BAD_INTEGRITY) ? "Password incorrect" : NULL;
+    rc = Leash_krb5_kinit(ctx, hParent, principal, password, lifetime,
+			  forwardable, proxiable, renew_life, addressless,
+			  publicip);
+    custom_msg = (rc == KRB5KRB_AP_ERR_BAD_INTEGRITY) ? "Password incorrect" :
+	NULL;
     return leash_error_message("Ticket initialization failed.",
-                               rcL, rc5, rcA, custom_msg,
-                               displayErrors);
+			       0, rc, 0, custom_msg, displayErrors);
 }
 
 long FAR
_______________________________________________
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