Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 31 Jul 2025 06:07:44 -0700
From:      Rick Macklem <rick.macklem@gmail.com>
To:        Benjamin Kaduk <bjkfbsd@gmail.com>
Cc:        Konstantin Belousov <kostikbel@gmail.com>, Cy Schubert <Cy.Schubert@cschubert.com>,  Jessica Clarke <jrtc27@freebsd.org>, Cy Schubert <cy@freebsd.org>,  "src-committers@freebsd.org" <src-committers@freebsd.org>,  "dev-commits-src-all@freebsd.org" <dev-commits-src-all@freebsd.org>,  "dev-commits-src-main@freebsd.org" <dev-commits-src-main@freebsd.org>
Subject:   Re: git: c7da9fb90b0b - main - KRB5: Enable MIT KRB5 by default
Message-ID:  <CAM5tNy6Va=edwT5TTa8NEtCHrpbAnN1NMDsBKNNbqNgPoCjVng@mail.gmail.com>
In-Reply-To: <CAJ5_RoDdhmpsLWtuCiaWJoR1yMvAq_4r-E%2BpUk03TiQofTZELQ@mail.gmail.com>
References:  <202507211410.56LEAD6J066633@gitrepo.freebsd.org> <47C3CC37-6F32-4376-900A-B5387B9817D5@freebsd.org> <20250721144645.3BA391BE@slippy.cwsent.com> <aH98iNXobigu39On@kib.kiev.ua> <20250722155941.AC7EB121@slippy.cwsent.com> <CAM5tNy63Ri73x3ByJUPFh7a0eCVjWPGW1hQwrkG0wz6pJ6-W3Q@mail.gmail.com> <aIcyq6JuYngAm4Ko@kib.kiev.ua> <CAM5tNy6pAUS1HD4W1=rxLXvfctAs1Ms_fxwUWz1X3tFNuVTVZg@mail.gmail.com> <CAJ5_RoBjpX_BoKgZTdOof5b83cdxjZyvn4iPM4m5voPHEr2SeQ@mail.gmail.com> <CAJ5_RoBXD4rkudaqo4BA%2BrggYcy%2BLUSnPrK2_FO4Cp_xG0fS=Q@mail.gmail.com> <CAM5tNy5DjktV54JaNcXSwc=9W9kyKTbYANyWp3wmgWu1aMvmLg@mail.gmail.com> <CAJ5_RoDdhmpsLWtuCiaWJoR1yMvAq_4r-E%2BpUk03TiQofTZELQ@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jul 30, 2025 at 9:24=E2=80=AFPM Benjamin Kaduk <bjkfbsd@gmail.com> =
wrote:
>
> On Wed, Jul 30, 2025 at 10:36=E2=80=AFAM Rick Macklem <rick.macklem@gmail=
.com> wrote:
>>
>> On Mon, Jul 28, 2025 at 3:32=E2=80=AFPM Benjamin Kaduk <bjkfbsd@gmail.co=
m> wrote:
>> >
>> > On Mon, Jul 28, 2025 at 3:04=E2=80=AFPM Benjamin Kaduk <bjkfbsd@gmail.=
com> wrote:
>> >>
>> >>
>> >> Note that MIT krb5 provides the gss_krb5_export_lucid_sec_context() A=
PI 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 con=
text" (i.e., do crypto negotiation, authentication, sometimes authorization=
, etc.) between two entities, the initiator and the acceprot, and then exch=
anging protected messages between the two (which can be either encrypted or=
 just integrity protection tags for otherweise cleartext data); later exten=
sions included the ability to produce identical PRF output on both parties,=
 etc..  The details are "mechanism-specific", and for this purpose we're ex=
clusively talking about the krb5 mechanism.  The steps to establish the sec=
urity context are complicated and sometimes fiddly, and in the general case=
 can require a large number of round-trips between the initiator and accept=
or before the security context is established.  The individual message-prot=
ection parts are comparatively simple and amendable to implementation in th=
e kernel for processing efficiency.
>> > RFC 2743 also defines functions for GSS_Export_sec_context() and GSS_I=
mport_sec_context(), that are designed essentially to pass information abou=
t an established security context from one process to another on the same m=
achine (which are presumably using the same implementation and version of t=
he implementation), so the contents of the exported blob are opaque and imp=
lementation-specific.  We are abusing that mechanism to export information =
about the security context that gssd has established and feed that informat=
ion into the kernel implementation of the per-message processing routines. =
 At present, this necessarily entails knowing the details of the implementa=
tion-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 postur=
e overall and somewhat future-proofed against future evolution by MIT krb5.
>> > (I note that recent Heimdal versions seem to also expose a gss_krb5_ex=
port_lucid_sec_context() API, so part of the problem is just that the Heimd=
al 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 =3D=3D 4" in make_external_luc=
id_ctx_v1()
>> function. This function only knows about the 0 and 1 setting for gctx->p=
roto.
>>
>> Any ideas, rick
>>
>
>
> I'm not seeing anything to suggest that a "gctx->proto" value of 4 is eve=
r expected; it looks like it's supposed to just be 0 (for the legacy RFC 19=
64 format) or 1 (for the "CFX" format of RFC 4121, with wider sequence numb=
ers for message-protection formats, etc.).  So maybe it's worth posting you=
r 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 =3D=3D 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 buil=
t?

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 i=
s 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 waiti=
ng 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 th=
ey did was define an OID for it.)
>
> It looks like a front-end to the same core implementation at least (techn=
ically not a wrapper for the public API, though).
> (There are a bunch of non-krb5 mechanisms, most not in terribly widesprea=
d use.)
>
> > Btw, do you have any experience porting KDC databases from Heimdal to M=
IT? (At this point, Cy has done it, but after doing so, the passwords all h=
ad to be reset. He thought he had used "--decrypt" when he dumped the Heimd=
al 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) di=
fferent techniques for encrypting the per-principal data in the dump file, =
so a trip through plaintext helps.  I do remember reading about Heimdal hav=
ing grown some support for the MIT database format; the commit message at h=
ttps://github.com/heimdal/heimdal/commit/57f1545a46fdad9207a71903a56f3c1d1f=
ff3a10 is perhaps a very high-level description of what is expected to be p=
ossible.
>
> -Ben



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAM5tNy6Va=edwT5TTa8NEtCHrpbAnN1NMDsBKNNbqNgPoCjVng>