[krbdev.mit.edu #8373] SPNEGO gss_init_sec_context() can fail or prematurely resolve creds
Greg Hudson via RT
rt-comment at krbdev.mit.edu
Mon Feb 29 16:29:59 EST 2016
SPNEGO's gss_init_sec_context() must determines a set of negotiable
mechanisms to send to the server. If an initiator cred handle was
provided by the caller, this process begins by calling
gss_inquire_cred() on the mechglue cred handle, passing NULL for all
of the result fields except the mechanism list.
Although the mechglue can service this request without making any
calls to mechs, it makes a call to the first mech in the credential
anyway. This can have some unfortunate side-effects:
* If the first cred is a krb5 cred which has not yet been resolved to
a specific ccache, it will be resolved without the benefit of the
target name, so the SPNEGO authorization will use the primary
credential cache rather than one chosen based on the authentication
target.
* If the first cred is a krb5 cred which has expired (before or after
resolution), the krb5 gss_inquire_cred() method will return
GSS_S_CREDENTIALS_EXPIRED, causing the SPNEGO gss_init_sec_context()
call to fail when it could otherwise proceed with a different
mechanism. (In at least some cases, this error could be detected at
gss_acquire_cred() time.)
The mechglue gss_inquire_context() function should skip the call into
the mechanism if the caller did not request a name, lifetime, or cred
usage.
More information about the krb5-bugs
mailing list