All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zhang Boyang <zhangboyang.id@gmail.com>
To: Robbie Harwood <rharwood@redhat.com>
Cc: The development of GNU GRUB <grub-devel@gnu.org>,
	Glenn Washburn <development@efficientek.com>,
	Daniel Kiper <dkiper@net-space.pl>, Pete Batard <pete@akeo.ie>
Subject: Re: [RFC PATCH] kern/dl: Add module version check
Date: Wed, 21 Dec 2022 15:57:08 +0800	[thread overview]
Message-ID: <3326fa35-0c2a-2a71-c191-a1195b52f550@gmail.com> (raw)
In-Reply-To: <jlgo7rxk7h1.fsf@redhat.com>

Hi,

(sorry for duplicate emails because I forgot to add CCs)

On 2022/12/21 06:58, Robbie Harwood wrote:
> Zhang Boyang <zhangboyang.id@gmail.com> writes:
> 
>> This patch add version information to GRUB modules. Specifically,
>> PACKAGE_VERSION is embedded as null-terminated string in .modver
>> section. This string is checked at module loading time. That module will
>> be rejected if mismatch is found. This will prevent loading modules from
>> different versions of GRUB.
>>
>> It should be pointed out that the version string is only consisted of
>> PACKAGE_VERSION. Any difference not reflected in PACKAGE_VERSION is not
>> noticed by version check (e.g. configure options).
> 
> Right now, this only affects non-secureboot scenarios (because we don't
> have external signed module support).  I would want to see a resolution
> to the external module signing question first so that we don't paint
> ourselves into a corner with something like this.
> 

This feature is a prerequisite for external signed module support (and 
it is mainly designed for this purpose). SBAT itself is not sufficient 
to protect version mismatch attacks. Consider this scenario:

1) GRUB 2.XX is free of vulnerabilities

2) GRUB 2.YY is also free of vulnerabilities

3) So GRUB 2.XX shares same SBAT numbers with GRUB 2.YY

4) So if there is no version check, it's possible to load GRUB 2.YY 
modules into GRUB 2.XX (and vice versa)

5) However, due to some changes in API or ABI, there is possibility that 
there are vulnerabilities when using GRUB 2.YY modules with GRUB 2.XX.

> I share Glenn's confusion about what real-world problems this addresses:
> my understanding is that grub modules mostly register callbacks, so the
> possibility of disaster is low (unless the callback interfaces change of
> course, but that generally has not happened).
> 

Please see my reply to Glenn for a example that mismatched modules 
crashes GRUB.

> The combination of those two things leads me to suspect this is not the
> right approach.  It seems likely that if we want to down the road of
> versionlocking, something like the kernel's ephemeral key approach would
> be better suited - and if we want external modules (which I don't think
> we do), full SBAT support.
> 

Sorry but I'm not familiar with the kernel's ephemeral key approach. 
Could you please give me some links to this?

By the way, I figured out why shim doesn't enforce SBAT checks for files 
if they are not directly loaded by shim AND have no SBAT information. 
According to 
https://github.com/rhboot/shim/commit/a2da05fcb8972628bec08e4adfc13abbafc319ad 
  , it's vendor's responsibility to revoke all files without SBAT 
information and only sign files with SBAT information at all time.

My grub-wrap patch 
(https://lists.gnu.org/archive/html/grub-devel/2022-12/msg00070.html ) 
already has support for embedding SBAT information to PE wrappers, 
although it not enforced. With this patch, it should be easy to 
implement external modules if wanted (yes, with full SBAT support, if 
vendor always add SBAT information to modules).

Best Regards,
Zhang Boyang

> Be well,
> --Robbie


  parent reply	other threads:[~2022-12-21  7:57 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-19 15:33 [RFC PATCH] kern/dl: Add module version check Zhang Boyang
2022-12-20 19:04 ` Glenn Washburn
2022-12-21  8:07   ` Zhang Boyang
2022-12-21 17:27     ` Glenn Washburn
2022-12-20 22:58 ` Robbie Harwood
2022-12-21  2:43   ` Pete Batard
2022-12-21  8:21     ` Zhang Boyang
2022-12-21  9:43       ` Thomas Schmitt
2022-12-21 11:34         ` Didier Spaier
2022-12-21 11:38         ` Zhang Boyang
2022-12-21 14:39           ` Pete Batard
2022-12-21  7:57   ` Zhang Boyang [this message]
2022-12-21 18:01     ` Robbie Harwood

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3326fa35-0c2a-2a71-c191-a1195b52f550@gmail.com \
    --to=zhangboyang.id@gmail.com \
    --cc=development@efficientek.com \
    --cc=dkiper@net-space.pl \
    --cc=grub-devel@gnu.org \
    --cc=pete@akeo.ie \
    --cc=rharwood@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.