-
-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for firmware updates via UEFI capsule #4855
Comments
This looks like a perfect, self-contained task for someone from the community to contribute. |
@marmarek do you believe that this can be done securely in practice? |
It very much depends on firmware vendors. Most importantly, whether updates are properly signed. |
@marmarek if the hardware doesn’t verify the updates, we do have a huge problem. That said, Qubes can at least check the signatures itself. Is it okay to check the signatures in dom0? My understanding is that parsing arbitrary X.509 certificates in dom0 is not a good idea, but that it is okay to parse X.509 certificates that we know to be safe. Therefore, dom0 would need to include the certificates, or at least their hashes. |
Dom0 would need some kind of root of trust for such updates anyway. |
Current idea: dom0 spawns a dispVM to get the updates using |
That could work for the actual update, when you know there is an update to install. But not necessary for periodic update checks, which IMO is also important part of this feature. Spawning DispVMs periodically may not be a good idea, given resource requirements. But maybe we could re-use updatevm for that, which is already there to check and download dom0 updates? |
@marmarek That would be a good idea, yes. As far as spawning DispVMs periodically, anyone who runs SaltStack on a cron job does that anyway, though most people do not. |
EFI System Resource Table, and in turn A workaround is to bypass the memmap check entirely in |
LVFS update metadata are in XML format, not covered by signatues. The only essential thing in it AFAICT is the capsule UUID, so perhaps we can just extract it and use it for each update's filename. FYI for package updates ( |
You can find some status update on this here: https://blog.3mdeb.com/2020/2020-06-17-qubes_summation/ (I don't see slides from this specific presentation, but there is video available). It covers some of your concerns. |
On currently updated Qubes 4.1-ish with Edit: maybe another option is to also install/boot a Xen-less kernel for the time of firmware update? Would need to pre-download and pre-copy the update to the |
The check needs to happen somewhere (otherwise you risk accidentally interpreting "random" memory area as ESRT, including VM-controlled one in the worst case). There is ongoing progress on moving the check to Xen, and only then skipping it in Linux.
The problem with this is, you need ESRT (mainly) to know what firmware to download, not only for installing it. If ESRT is static (should be, right?), it could be copied to a file on Xen-less kernel, but it sounds risky (using outdated copy). |
Wrong link? |
Yup, edited. |
ESRT is mostly static, with one exception: update status. fwupd uses this value to report whether the firmware update has succeeded. |
Support for this has already been upstreamed as a contrib package in fwupd. Tasks that need to be resolved:
|
That's yet another function of updatevm. QubesOS/qubes-issues#4855
Qubes OS version:
Qubes release 4.0 (R4.0)
Affected component(s) or functionality:
dom0
Steps to reproduce the behavior:
Look for a way to update the UEFI firmware securely
Expected or desired behavior:
QubesOS supports this, provided that it is supported by the hardware vendor. That is, the hardware vendor supplies digitially signed update files, and provides the public keys for the signatures, in a way that Qubes can check the signatures before using the UEFI capsule mechanism to submit the update.
Actual behavior:
No such method
General notes:
Firmware vendors do release security updates. That said, this should be optional.
I have consulted the following relevant documentation:
I am aware of the following related, non-duplicate issues:
The text was updated successfully, but these errors were encountered: