Skip to content

Commit

Permalink
pull up r24399 from trunk
Browse files Browse the repository at this point in the history
 ------------------------------------------------------------------------
 r24399 | ghudson | 2010-09-30 23:45:43 -0400 (Thu, 30 Sep 2010) | 12 lines

 ticket: 6768
 subject: GSSAPI forwarded credentials must be encrypted in session key
 target_version: 1.8.4
 tags: pullup

 When IAKERB support was added, the krb5_mk_req checksum function
 gained access to the send subkey.  This caused GSSAPI forwarded
 credentials to be encrypted in the subkey, which violates RFC 4121
 section 4.1.1 and is not accepted by Microsoft's implementation.
 Temporarily null out the send subkey in the auth context so that
 krb5_mk_ncred uses the session key instead.

ticket: 6768
version_fixed: 1.8.4
target_version: 1.8.4
status: resolved

git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-8@24460 dc483132-0cff-0310-8789-dd5450dbe970
  • Loading branch information
tlyu committed Oct 15, 2010
1 parent d4da5fa commit 32be985
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions src/lib/gssapi/krb5/init_sec_context.c
Expand Up @@ -234,9 +234,7 @@ struct gss_checksum_data {
krb5_data checksum_data;
};

#ifdef CFX_EXERCISE
#include "../../krb5/krb/auth_con.h"
#endif
static krb5_error_code KRB5_CALLCONV
make_gss_checksum (krb5_context context, krb5_auth_context auth_context,
void *cksum_data, krb5_data **out)
Expand All @@ -247,6 +245,7 @@ make_gss_checksum (krb5_context context, krb5_auth_context auth_context,
struct gss_checksum_data *data = cksum_data;
krb5_data credmsg;
unsigned int junk;
krb5_key send_subkey;

data->checksum_data.data = 0;
credmsg.data = 0;
Expand All @@ -262,13 +261,22 @@ make_gss_checksum (krb5_context context, krb5_auth_context auth_context,

assert(data->cred->name != NULL);

/*
* RFC 4121 4.1.1 specifies forwarded credentials must be encrypted in
* the session key, but krb5_fwd_tgt_creds will use the send subkey if
* it's set in the auth context. Null out the send subkey temporarily.
*/
send_subkey = auth_context->send_subkey;
auth_context->send_subkey = NULL;

code = krb5_fwd_tgt_creds(context, auth_context, 0,
data->cred->name->princ, data->ctx->there->princ,
data->cred->ccache, 1,
&credmsg);

/* turn KRB5_AUTH_CONTEXT_DO_TIME back on */
/* Turn KRB5_AUTH_CONTEXT_DO_TIME back on and reset the send subkey. */
krb5_auth_con_setflags(context, auth_context, con_flags);
auth_context->send_subkey = send_subkey;

if (code) {
/* don't fail here; just don't accept/do the delegation
Expand Down

0 comments on commit 32be985

Please sign in to comment.