On Fri, Oct 11, 2024 at 05:23:04PM +0200, Julian Andres Klode wrote:
> Copy the list of things that do not affect secure boot state from
> the shim_lock verifier to the lockdown verifier, and change the code
> there to defer for anything not in that list, rather than known
> images.
>
> This prevents non-shim-lock systems from getting vulnerabilities in
> newly added or missed "insecure" file types.
>
> Signed-off-by: Julian Andres Klode <julian.kl...@canonical.com>
> ---
>  grub-core/kern/lockdown.c | 50 +++++++++++++++++++++++----------------
>  1 file changed, 30 insertions(+), 20 deletions(-)
>
> diff --git a/grub-core/kern/lockdown.c b/grub-core/kern/lockdown.c
> index af6d493cd..44ac6fd6c 100644
> --- a/grub-core/kern/lockdown.c
> +++ b/grub-core/kern/lockdown.c
> @@ -35,28 +35,38 @@ lockdown_verifier_init (grub_file_t io __attribute__ 
> ((unused)),
>
>    switch (type & GRUB_FILE_TYPE_MASK)
>      {
> -    case GRUB_FILE_TYPE_GRUB_MODULE:
> -    case GRUB_FILE_TYPE_LINUX_KERNEL:
> -    case GRUB_FILE_TYPE_MULTIBOOT_KERNEL:
> -    case GRUB_FILE_TYPE_XEN_HYPERVISOR:
> -    case GRUB_FILE_TYPE_BSD_KERNEL:
> -    case GRUB_FILE_TYPE_XNU_KERNEL:
> -    case GRUB_FILE_TYPE_PLAN9_KERNEL:
> -    case GRUB_FILE_TYPE_NTLDR:
> -    case GRUB_FILE_TYPE_TRUECRYPT:
> -    case GRUB_FILE_TYPE_FREEDOS:
> -    case GRUB_FILE_TYPE_PXECHAINLOADER:
> -    case GRUB_FILE_TYPE_PCCHAINLOADER:
> -    case GRUB_FILE_TYPE_COREBOOT_CHAINLOADER:
> -    case GRUB_FILE_TYPE_EFI_CHAINLOADED_IMAGE:
> -    case GRUB_FILE_TYPE_ACPI_TABLE:
> -    case GRUB_FILE_TYPE_DEVICE_TREE_IMAGE:
> -    case GRUB_FILE_TYPE_FONT:
> -      *flags = GRUB_VERIFY_FLAGS_DEFER_AUTH;
> -
> -      /* Fall through. */
> +    /* Files that do not affect secureboot state. */
> +    case GRUB_FILE_TYPE_NONE:
> +    case GRUB_FILE_TYPE_LOOPBACK:
> +    case GRUB_FILE_TYPE_LINUX_INITRD:
> +    case GRUB_FILE_TYPE_OPENBSD_RAMDISK:
> +    case GRUB_FILE_TYPE_XNU_RAMDISK:
> +    case GRUB_FILE_TYPE_SIGNATURE:
> +    case GRUB_FILE_TYPE_PUBLIC_KEY:
> +    case GRUB_FILE_TYPE_PUBLIC_KEY_TRUST:
> +    case GRUB_FILE_TYPE_PRINT_BLOCKLIST:
> +    case GRUB_FILE_TYPE_TESTLOAD:
> +    case GRUB_FILE_TYPE_GET_SIZE:
> +    case GRUB_FILE_TYPE_ZFS_ENCRYPTION_KEY:
> +    case GRUB_FILE_TYPE_CAT:
> +    case GRUB_FILE_TYPE_HEXCAT:
> +    case GRUB_FILE_TYPE_CMP:
> +    case GRUB_FILE_TYPE_HASHLIST:
> +    case GRUB_FILE_TYPE_TO_HASH:
> +    case GRUB_FILE_TYPE_KEYBOARD_LAYOUT:
> +    case GRUB_FILE_TYPE_PIXMAP:
> +    case GRUB_FILE_TYPE_GRUB_MODULE_LIST:
> +    case GRUB_FILE_TYPE_CONFIG:
> +    case GRUB_FILE_TYPE_THEME:
> +    case GRUB_FILE_TYPE_GETTEXT_CATALOG:
> +    case GRUB_FILE_TYPE_FS_SEARCH:
> +    case GRUB_FILE_TYPE_LOADENV:
> +    case GRUB_FILE_TYPE_SAVEENV:
> +    case GRUB_FILE_TYPE_VERIFY_SIGNATURE:
> +      return GRUB_ERR_NONE;

Instead of keeping the same list in both places would not it be easier
to have a func in grub-core/kern/lockdown.c which returns a bool and is
called from both grub-core/kern/lockdown.c and grub-core/kern/efi/sb.c?

Daniel

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to