public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Marvin Häuser" <mhaeuser@posteo.de>
To: devel@edk2.groups.io, mcb30@ipxe.org,
	Laszlo Ersek <lersek@redhat.com>, Andrew Fish <afish@apple.com>,
	Michael Kinney <michael.d.kinney@intel.com>
Subject: Re: [edk2-devel] [GSoC proposal] Secure Image Loader
Date: Wed, 7 Apr 2021 23:31:36 +0200	[thread overview]
Message-ID: <e80b2fdc-c8e4-00d8-4a3e-7ce459383518@posteo.de> (raw)
In-Reply-To: <a4e93ea3-bfe1-9a4c-ec44-52d74e4dd9dc@ipxe.org>

Good day Michael,

Sorry, but I do not see why this would be the case. In fact the solution 
is (temporary) co-existence, as already is the case with 
InstallProtocolInterface() and InstallMultipleProtocolInterfaces(). As 
the new APIs would be a superset of the old ones, latter can be 
implemented with former, as also previously done (*2_PROTOCOL instances 
and shims in e.g. EdkCompatibilityPkg). In some cases, the original 
protocol interfaces were actually deprecated successfully from the EDK 
II code base. I would probably offer PCDs to disable the expose of the 
old APIs, so platforms with little need for backwards-compatibility and 
more focus on security can tighten the constraints as they see fit. 
Considering the shimmed interfaces for the old protocols/PPIs/... can be 
implemented on top of the new public API, and the public API must not 
change, this code would be practically maintenance-free too in my opinion.

As for your example, I do not believe what is described is "broken". 
Ideally, the platform loads all images to have a centralized place for 
the security verification. While we do a very similar thing at 
Acidanthera with our OpenCore bootloader to support Apple Secure Boot, I 
hope you agree that this behaviour is actually a risky hack (now there 
are two points of failure for security verification). Meanwhile, the 
changes I'd like to propose to the current interfaces are mandatory to 
ensure secure parsing of data. Lastly, this sort of API I would not 
expect to be accessed outside of platform code.

Am I missing or overlooking something?

Best regards,
Marvin

On 07.04.21 23:05, Michael Brown wrote:
> On 05/04/2021 00:01, Marvin Häuser wrote:
>> 3. During my initial exploration, I discovered defective PPIs and 
>> protocols (e.g. returning data with no corresponding size) 
>> originating from the UEFI PI and UEFI specifications. Changes need to 
>> be discussed, settled on, and submitted to the UEFI Forum.
>
> Would any of these changes break backwards compatibility?  With the 
> UEFI development model, any protocol that has ever existed in the 
> specification will practically need to always be supported in that 
> form: breaking backwards compatibility is simply not an option.
>
> For example: there is a fundamental design flaw in the LoadImage() and 
> StartImage() API that makes it logically impossible for arbitrary code 
> to install an EFI_LOADED_IMAGE_PROTOCOL instance (see 
> https://github.com/ipxe/ProxyLoaderPkg/#why-is-it-needed for details 
> on this).  But there's zero chance that this design flaw will ever be 
> fixed, because there's no way to eliminate code that relies on the 
> existing LoadImage()/StartImage() APIs.
>
> So: if the formally verified image loader can fit within the 
> constraints of "must not modify any externally exposed APIs" then it 
> sounds like a potentially good idea.  If it requires breaking changes 
> to public APIs then I don't see how it could be integrated in practice.
>
> Thanks,
>
> Michael
>
>
> 
>
>


  reply	other threads:[~2021-04-07 21:31 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-04 23:01 [GSoC proposal] Secure Image Loader Marvin Häuser
2021-04-06  9:41 ` [edk2-devel] " Nate DeSimone
2021-04-06 10:06   ` Marvin Häuser
2021-04-06 16:16     ` [EXTERNAL] " Bret Barkelew
2021-04-08 11:16     ` Laszlo Ersek
2021-04-08 14:13       ` Andrew Fish
2021-04-08 16:06         ` Marvin Häuser
2021-04-08 16:44           ` Andrew Fish
2021-04-08 17:02             ` Marvin Häuser
2021-04-08 17:39               ` Andrew Fish
2021-04-08 21:07                 ` Marvin Häuser
2021-04-08 21:48                   ` Andrew Fish
2021-04-08 22:42                   ` Michael Brown
2021-04-12 17:22   ` Marvin Häuser
2021-04-12 18:30     ` [EXTERNAL] " Bret Barkelew
2021-04-13  0:19     ` Michael D Kinney
2021-04-13  0:56       ` Nate DeSimone
2021-04-13  7:31         ` Marvin Häuser
2021-04-13 15:05           ` Andrew Fish
2021-04-13 18:04           ` Nate DeSimone
2021-04-13 18:08             ` Michael D Kinney
2021-04-13 18:14             ` Andrew Fish
2021-04-16  7:36               ` Marvin Häuser
2021-04-07 21:05 ` Michael Brown
2021-04-07 21:31   ` Marvin Häuser [this message]
2021-04-07 21:50     ` Michael Brown
2021-04-07 22:02       ` Andrew Fish
     [not found]       ` <1673B28429E5B4FE.4742@groups.io>
2021-04-07 22:10         ` Andrew Fish
2021-04-08  9:04           ` Marvin Häuser
2021-04-08  9:40             ` Michael Brown
2021-04-08  8:53       ` Marvin Häuser
2021-04-08  9:26         ` Michael Brown
2021-04-08  9:41           ` Marvin Häuser
2021-04-08  9:50             ` Marvin Häuser
2021-04-08  9:55             ` Michael Brown
2021-04-08 10:13               ` Marvin Häuser
2021-04-08 10:31                 ` Michael Brown

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-list 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=e80b2fdc-c8e4-00d8-4a3e-7ce459383518@posteo.de \
    --to=devel@edk2.groups.io \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox