https://mjg59.dreamwidth.org/72892.html
Account name: [ ] Password [ ] [Log in]
(OpenID?) (Forgot it?) [ ] Remember Me
You're viewing [personal profile] mjg59's journal
Create a Dreamwidth Account Learn More
[ ] [Interest ] [Go]
Reload page in style: site light
Matthew Garrett
Secure boot certificate rollover is real but probably won't hurt you
Secure boot certificate rollover is real but probably won't hurt you
Jul. 30th, 2025 06:48 pm
[personal profile] mjg59
LWN wrote an article which opens with the assertion "Linux users who
have Secure Boot enabled on their systems knowingly or unknowingly
rely on a key from Microsoft that is set to expire in September".
This is, depending on interpretation, either misleading or just plain
wrong, but also there's not a good source of truth here, so.
First, how does secure boot signing work? Every system that supports
UEFI secure boot ships with a set of trusted certificates in a
database called "db". Any binary signed with a chain of certificates
that chains to a root in db is trusted, unless either the binary (via
hash) or an intermediate certificate is added to "dbx", a separate
database of things whose trust has been revoked[1]. But, in general,
the firmware doesn't care about the intermediate or the number of
intermediates or whatever - as long as there's a valid chain back to
a certificate that's in db, it's going to be happy.
That's the conceptual version. What about the real world one? Most
x86 systems that implement UEFI secure boot have at least two root
certificates in db - one called "Microsoft Windows Production PCA
2011", and one called "Microsoft Corporation UEFI CA 2011". The
former is the root of a chain used to sign the Windows bootloader,
and the latter is the root used to sign, well, everything else.
What is "everything else"? For people in the Linux ecosystem, the
most obvious thing is the Shim bootloader that's used to bridge
between the Microsoft root of trust and a given Linux distribution's
root of trust[2]. But that's not the only third party code executed
in the UEFI environment. Graphics cards, network cards, RAID and
iSCSI cards and so on all tend to have their own unique
initialisation process, and need board-specific drivers. Even if you
added support for everything on the market to your system firmware, a
system built last year wouldn't know how to drive a graphics card
released this year. Cards need to provide their own drivers, and
these drivers are stored in flash on the card so they can be updated.
But since UEFI doesn't have any sandboxing environment, those drivers
could do pretty much anything they wanted to. Someone could
compromise the UEFI secure boot chain by just plugging in a card with
a malicious driver on it, and have that hotpatch the bootloader and
introduce a backdoor into your kernel.
This is avoided by enforcing secure boot for these drivers as well.
Every plug-in card that carries its own driver has it signed by
Microsoft, and up until now that's been a certificate chain going
back to the same "Microsoft Corporation UEFI CA 2011" certificate
used in signing Shim. This is important for reasons we'll get to.
The "Microsoft Windows Production PCA 2011" certificate expires in
October 2026, and the "Microsoft Corporation UEFI CA 2011" one in
June 2026. These dates are not that far in the future! Most of you
have probably at some point tried to visit a website and got an error
message telling you that the site's certificate had expired and that
it's no longer trusted, and so it's natural to assume that the
outcome of time's arrow marching past those expiry dates would be
that systems will stop booting. Thankfully, that's not what's going
to happen.
First up: if you grab a copy of the Shim currently shipped in Fedora
and extract the certificates from it, you'll learn it's not directly
signed with the "Microsoft Corporation UEFI CA 2011" certificate.
Instead, it's signed with a "Microsoft Windows UEFI Driver Publisher"
certificate that chains to the "Microsoft Corporation UEFI CA 2011"
certificate. That's not unusual, intermediates are commonly used and
rotated. But if we look more closely at that certificate, we learn
that it was issued in 2023 and expired in 2024. Older versions of
Shim were signed with older intermediates. A very large number of
Linux systems are already booting certificates that have expired, and
yet things keep working. Why?
Let's talk about time. In the ways we care about in this discussion,
time is a social construct rather than a meaningful reality. There's
no way for a computer to observe the state of the universe and know
what time it is - it needs to be told. It has no idea whether that
time is accurate or an elaborate fiction, and so it can't with any
degree of certainty declare that a certificate is valid from an
external frame of reference. The failure modes of getting this wrong
are also extremely bad! If a system has a GPU that relies on an
option ROM, and if you stop trusting the option ROM because either
its certificate has genuinely expired or because your clock is wrong,
you can't display any graphical output[3] and the user can't fix the
clock and, well, crap.
The upshot is that nobody actually enforces these expiry dates -
here's the reference code that disables it. In a year's time we'll
have gone past the expiration date for "Microsoft Windows UEFI Driver
Publisher" and everything will still be working, and a few months
later "Microsoft Windows Production PCA 2011" will also expire and
systems will keep booting Windows despite being signed with a
now-expired certificate. This isn't a Y2K scenario where everything
keeps working because people have done a huge amount of work - it's a
situation where everything keeps working even if nobody does any
work.
So, uh, what's the story here? Why is there any engineering effort
going on at all? What's all this talk of new certificates? Why are
there sensationalist pieces about how Linux is going to stop working
on old computers or new computers or maybe all computers?
Microsoft will shortly start signing things with a new certificate
that chains to a new root, and most systems don't trust that new
root. System vendors are supplying updates[4] to their systems to add
the new root to the set of trusted keys, and Microsoft has supplied a
fallback that can be applied to all systems even without vendor
support[5]. If something is signed purely with the new certificate
then it won't boot on something that only trusts the old certificate
(which shouldn't be a realistic scenario due to the above), but if
something is signed purely with the old certificate then it won't
boot on something that only trusts the new certificate.
How meaningful a risk is this? We don't have an explicit statement
from Microsoft as yet as to what's going to happen here, but we
expect that there'll be at least a period of time where Microsoft
signs binaries with both the old and the new certificate, and in that
case those objects should work just fine on both old and new
computers. The problem arises if Microsoft stops signing things with
the old certificate, at which point new releases will stop booting on
systems that don't trust the new key (which, again, shouldn't
happen). But even if that does turn out to be a problem, nothing is
going to force Linux distributions to stop using existing Shims
signed with the old certificate, and having a Shim signed with an old
certificate does nothing to stop distributions signing new versions
of grub and kernels. In an ideal world we have no reason to ever
update Shim[6] and so we just keep on shipping one signed with two
certs.
If there's a point in the future where Microsoft only signs with the
new key, and if we were to somehow end up in a world where systems
only trust the old key and not the new key[7], then those systems
wouldn't boot with new graphics cards, wouldn't be able to run new
versions of Windows, wouldn't be able to run any Linux distros that
ship with a Shim signed only with the new certificate. That would be
bad, but we have a mechanism to avoid it. On the other hand, systems
that only trust the new certificate and not the old one would refuse
to boot older Linux, wouldn't support old graphics cards, and also
wouldn't boot old versions of Windows. Nobody wants that, and for the
foreseeable future we're going to see new systems continue trusting
the old certificate and old systems have updates that add the new
certificate, and everything will just continue working exactly as it
does now.
Conclusion: Outside some corner cases, the worst case is you might
need to boot an old Linux to update your trusted keys to be able to
install a new Linux, and no computer currently running Linux will
break in any way whatsoever.
[1] (there's also a separate revocation mechanism called SBAT which I
wrote about here, but it's not relevant in this scenario)
[2] Microsoft won't sign GPLed code for reasons I think are
unreasonable, so having them sign grub was a non-starter, but also
the point of Shim was to allow distributions to have something that
doesn't change often and be able to sign their own bootloaders and
kernels and so on without having to have Microsoft involved, which
means grub and the kernel can be updated without having to ask
Microsoft to sign anything and updates can be pushed without any
additional delays
[3] It's been a long time since graphics cards booted directly into a
state that provided any well-defined programming interface. Even back
in 90s, cards didn't present VGA-compatible registers until
card-specific code had been executed (hence DEC Alphas having an x86
emulator in their firmware to run the driver on the card). No driver?
No video output.
[4] There's a UEFI-defined mechanism for updating the keys that
doesn't require a full firmware update, and it'll work on all devices
that use the same keys rather than being per-device
[5] Using the generic update without a vendor-specific update means
it wouldn't be possible to issue further updates for the next key
rollover, or any additional revocation updates, but I'm hoping to be
retired by then and I hope all these computers will also be retired
by then
[6] I said this in 2012 and it turned out to be wrong then so it's
probably wrong now sorry, but at least SBAT means we can revoke
vulnerable grubs without having to revoke Shim
[7] Which shouldn't happen! There's an update to add the new key that
should work on all PCs, but there's always the chance of firmware
bugs
Tags:
* advogato,
* fedora
* Previous Entry
* Add Memory
* Share This Entry
* Next Entry
---------------------------------------------------------------------
* Reply
---------------------------------------------------------------------
Profile
Matthew Garrett
About Matthew
Power management, mobile and firmware developer on Linux. Security
developer at Aurora. Ex-biologist. [personal profile] mjg59 on
Twitter. Content here should not be interpreted as the opinion of my
employer. Also on Mastodon.
Expand Cut Tags
No cut tags
Top of page