Re: [PATCH RFC v2 00/12] Enroll kernel keys thru MOK

From: Eric Snowberg
Date: Tue Aug 03 2021 - 15:54:23 EST



> On Aug 3, 2021, at 11:01 AM, Mimi Zohar <zohar@xxxxxxxxxxxxx> wrote:
>
> On Mon, 2021-07-26 at 13:13 -0400, Eric Snowberg wrote:
>
>> When the kernel boots, if MokListTrustedRT is set and
>> EFI_VARIABLE_NON_VOLATILE is not set, the MokListRT is loaded into the
>> mok keyring instead of the platform keyring. Mimi has suggested that
>> only CA keys or keys that can be vouched for by other kernel keys be
>> loaded into this keyring. All other certs will load into the platform
>> keyring instead.
>
> I suggested only loading the CA keys stored in the MOK db onto the MOK
> keyring. Like the builtin trusted keyring, the MOK keyring would also
> be linked to the secondary keyring. Assuming the secondary keyring is
> defined, all other properly signed MOK db keys - signed by keys on the
> builtin, secondary or MOK keyring - would be loaded onto the secondary
> keyring.
>
> As previously discussed, this might require reading the MOK db twice -
> once to load the CA keys on the MOK keyring, a second time to load the
> remaining properly signed keys onto the secondary keyring.

I’m only loading CA keys or keys that can be vouched for by other kernel
keys into the new mok keyring. Currently, I’m not doing another pass. I
could add another pass, but it would not solve the issue with someone trying
to load an intermediate CA along with a leaf cert. This would require yet
a third pass. I wasn’t sure if this added complexity was necessary.

Currently, any CA contained within the MOK db would now be trusted by the
kernel. Someone using a kernel with the secondary keyring enabled could
load the intermediate and leaf certs themselves following boot. Taking
this into account, if you’d like to see two passes, let me know and I’ll add
that in v3. If a second pass is done, do you really want these additional
keys added to the secondary keyring or should they go into the mok keyring
instead? I was under the impression the secondary should be empty until a
user adds their own keys into it. Thanks.