[PATCH] Improve krb5 KDC tests, kdc behaviour
Andreas Schneider
asn at cryptomilk.org
Mon Feb 9 01:41:19 MST 2015
On Monday 09 February 2015 21:32:37 Andrew Bartlett wrote:
> On Mon, 2015-02-09 at 09:11 +0100, Andreas Schneider wrote:
> > On Monday 09 February 2015 13:56:34 Andrew Bartlett wrote:
> > > On Tue, 2015-02-03 at 13:45 +0100, Andreas Schneider wrote:
> > > > We have found the issue. It is in the client code and not in the KDC.
> > > >
> > > > See the attached patch.
> > > >
> > > > -- andreas
> > > >
> > > > Subject: [PATCH] krb5-wrap: Use the principal returned by the KDC to
> > > > create
> > > >
> > > > the ccache
> > > >
> > > > We request a TGT in uppercase from the KDC. We turned on
> > > > canonicalization for that so the KDC returns the principal in
> > > > lowercase
> > > > cause of this. As we use the uppercase prinicpal to create the ccache
> > > > we
> > > > fail to find the tickets we need later because it is stored in the
> > > > incorrect case. You have to use the princial returned by the KDC here.
> > >
> > > This all seems reasonable, except that I can't see where we set
> > > canonicalization on.
> >
> > gensec_update -> gensec_gssapi_client_creds -> cli_credentials_get_ccache
> > -> cli_credentials_get_named_ccache -> kinit_to_ccache ->
> > krb5_get_init_creds_opt_set_win2k
> >
> > krb5_get_init_creds_opt_set_win2k is a Heimdal call which sets
> > KRB5_INIT_CREDS_NO_C_CANON_CHECK
>
> This appears, as far as I can tell, not to change anything in the
> outgoing or incoming packets. Certainly not the canonicalise flag (I
> assert on that specifically). It is one of the things I test in my
> monster krb5.kdc.canon test suite, because I wrongly assumed it did such
> things.
Sounds like a bug in Heimdal then.
With MIT KRB5 we call krb5_get_init_creds_opt_set_canonicalize() which sets
the canonicalize flag. After that we acquire a TGT and the KDC returns a
canonicalized principal. This principal needs to be used to initialize the
ccache so later kerberos calls are able to find the ticket in the cache.
> > > Is that only in your patch series? If not this
> > > difference in the MIT vs Heimdal default behaviour may expose other
> > > issues in other places, or there may still be more to it.
> >
> > No, it is simply wrong if you don't use the principal from the TGT
> > returned by the KDC to initialize the ccache!
>
> I still think that if this 'fixes' things, even if it is right, that it
> may indicate another difference that may matter. In our recent testing
> work, we found small, 'irrelevant' errors in almost unrelated test
> suites were the only protection we had against whole classes of
> errors.
Samba has added something pretty ugly in order to do cannonicalization in
Heimdal.
See source4/heimdal/lib/krb5/ticket.c line 690
/*
* HACK:
* this is really a ugly hack, to support using the Netbios Domain Name
* as realm against windows KDC's, they always return the full realm
* based on the DNS Name.
*/
flags |= EXTRACT_TICKET_ALLOW_SERVER_MISMATCH;
flags |= EXTRACT_TICKET_ALLOW_CNAME_MISMATCH;
I wouldn't be surprised if this hides some bugs in Heimdal ...
-- andreas
More information about the samba-technical
mailing list