On Wed, Jul 30, 2025 at 9:24 PM Benjamin Kaduk <bjkf...@gmail.com> wrote:
>
> On Wed, Jul 30, 2025 at 10:36 AM Rick Macklem <rick.mack...@gmail.com> wrote:
>>
>> On Mon, Jul 28, 2025 at 3:32 PM Benjamin Kaduk <bjkf...@gmail.com> wrote:
>> >
>> > On Mon, Jul 28, 2025 at 3:04 PM Benjamin Kaduk <bjkf...@gmail.com> wrote:
>> >>
>> >>
>> >> Note that MIT krb5 provides the gss_krb5_export_lucid_sec_context() API 
>> >> that does a lot of the work of getting useful bits out of an established 
>> >> GSS security context.
>> >>
>> >
>> >
>> >
>> >
>> > And a bit more context on what is going on here and why kgssapi has to 
>> > care:
>> > The GSS-API (RFC 2743) is all about a way to "establish a security 
>> > context" (i.e., do crypto negotiation, authentication, sometimes 
>> > authorization, etc.) between two entities, the initiator and the acceprot, 
>> > and then exchanging protected messages between the two (which can be 
>> > either encrypted or just integrity protection tags for otherweise 
>> > cleartext data); later extensions included the ability to produce 
>> > identical PRF output on both parties, etc..  The details are 
>> > "mechanism-specific", and for this purpose we're exclusively talking about 
>> > the krb5 mechanism.  The steps to establish the security context are 
>> > complicated and sometimes fiddly, and in the general case can require a 
>> > large number of round-trips between the initiator and acceptor before the 
>> > security context is established.  The individual message-protection parts 
>> > are comparatively simple and amendable to implementation in the kernel for 
>> > processing efficiency.
>> > RFC 2743 also defines functions for GSS_Export_sec_context() and 
>> > GSS_Import_sec_context(), that are designed essentially to pass 
>> > information about an established security context from one process to 
>> > another on the same machine (which are presumably using the same 
>> > implementation and version of the implementation), so the contents of the 
>> > exported blob are opaque and implementation-specific.  We are abusing that 
>> > mechanism to export information about the security context that gssd has 
>> > established and feed that information into the kernel implementation of 
>> > the per-message processing routines.  At present, this necessarily entails 
>> > knowing the details of the implementation-specific opaque blob that is the 
>> > "export sec context token", which is what the sys/kgssapi/krb5/krb5_mech.c 
>> > code is doing.  But if we can get the information we want without breaking 
>> > the abstraction barrier, such as via the 
>> > gss_krb5_export_lucid_sec_context() API, we are in a more robust posture 
>> > overall and somewhat future-proofed against future evolution by MIT krb5.
>> > (I note that recent Heimdal versions seem to also expose a 
>> > gss_krb5_export_lucid_sec_context() API, so part of the problem is just 
>> > that the Heimdal in base is so old.)
>>
>> Well, here's some "not so good" news...
>> I've been trying to use gss_inquire_sec_context_by_oid(..) with the oid
>> for the GSS_KRB5_EXPORT_LUCID_SEC_CONTEXT_OID with version 1.
>> It kept failing.
>> The problem seems to be that "gctx->proto == 4" in 
>> make_external_lucid_ctx_v1()
>> function. This function only knows about the 0 and 1 setting for gctx->proto.
>>
>> Any ideas, rick
>>
>
>
> I'm not seeing anything to suggest that a "gctx->proto" value of 4 is ever 
> expected; it looks like it's supposed to just be 0 (for the legacy RFC 1964 
> format) or 1 (for the "CFX" format of RFC 4121, with wider sequence numbers 
> for message-protection formats, etc.).  So maybe it's worth posting your 
> current WIP somewhere to take a closer look at what's going on.

Yea, the debugging I did was flawed (I probably got the wrong offset
in the structure).
It is weird, though. If I do gss_inquire_sec_context_by_oid(&minor, ctx,
OID_FOR_GSS_INQUIRE_SSPI_SESSION_KEY, &key), it
works and gives me the key and encryption type.

If I do the same, but with the 12 byte OID for LUCID v1 (the 11 bytes from the
string + a 1 byte), it returns major == GSS_S_COMPLETE, but no data and
a weird 39756046(decimal) or 0x25ea10e(hex) minor.
(Oh, and I tried gss_krb5_export_lucid_sec_context() and got the same
weird error.)

Also, if I look at the actual_mech_type returned by gss_init_sec_context(),
I get an instant crash, because the "elements" pointer cannot be
accessed (this doesn't much matter, since the info should always be just
the Kerberos OID).
--> I suspect there is some problem w.r.t. how the libraries are being built?

I'm now building from sources to try and dig into the library functions.

rick

>
> From your previous message,
>
> > I am working on using gss_inquire_sec_context_by_oid(), which I think is 
> > just a front-end to gss_krb5_export_lucid_sec_context()? If that doesn't 
> > work, I'll switch to gss_krb5_export_lucid_sec_context(). (I am still 
> > waiting for the day when there is another mechanism. I have heard rumblings 
> > w.r.t. a mechanism for the Oauth stuff, but as far as I know, about all 
> > that they did was define an OID for it.)
>
> It looks like a front-end to the same core implementation at least 
> (technically not a wrapper for the public API, though).
> (There are a bunch of non-krb5 mechanisms, most not in terribly widespread 
> use.)
>
> > Btw, do you have any experience porting KDC databases from Heimdal to MIT? 
> > (At this point, Cy has done it, but after doing so, the passwords all had 
> > to be reset. He thought he had used "--decrypt" when he dumped the Heimdal 
> > KDC.)
>
> I do not have such experience, but the conventional way to do it involves an 
> unencrypted dump (which I presume is what the aforementioned "--decrypt" 
> does).  Heimdal and MIT use (or at least used, the last time I looked) 
> different techniques for encrypting the per-principal data in the dump file, 
> so a trip through plaintext helps.  I do remember reading about Heimdal 
> having grown some support for the MIT database format; the commit message at 
> https://github.com/heimdal/heimdal/commit/57f1545a46fdad9207a71903a56f3c1d1fff3a10
>  is perhaps a very high-level description of what is expected to be possible.
>
> -Ben

Reply via email to