Due to the nature of what we are doing, fwupd takes security very seriously. If you have any concerns please let us know.
The main, and 1.9.x, branches are fully supported by the upstream authors. Additionally, the 1.8.x branch is supported just for security fixes.
| Version | Supported | EOL |
|---|---|---|
| 2.0.x | :heavy_check_mark: | 2028-01-01 |
| 1.9.x | :heavy_check_mark: | 2027-01-01 |
| 1.8.x | :white_check_mark: | 2025-01-01 |
| 1.7.x | :x: | 2024-06-01 |
| 1.6.x | :x: | 2024-01-01 |
| 1.5.x | :x: | 2022-01-01 |
| 1.4.x | :x: | 2021-05-01 |
| 1.3.x | :x: | 2020-07-01 |
| 1.2.x | :x: | 2019-12-01 |
| 1.1.x | :x: | 2018-11-01 |
| 1.0.x | :x: | 2018-10-01 |
| 0.9.x | :x: | 2018-02-01 |
Older releases than this are unsupported by upstream but may be supported by your distributor or distribution. If you open an issue with one of these older releases the very first question from us is going to be asking if it's fixed on a supported branch. You can use the flatpak or snap packages if your distributor is unwilling to update to a supported version.
If you find a vulnerability in fwupd you should let us know using a private vulnerability disclosure on GitHub, with a description of the issue, the steps you took to create the issue, affected versions, and, if known, mitigations for the issue.
Failing that, please report the issue against the fwupd component in Red Hat bugzilla, with the security checkbox set. You should get a response within 3 days. We have no bug bounty program, but we're happy to credit you in updates if this is what you would like us to do.
In this diagram, the arrow shows the flow of information from one entity to another.
Important things to note:
flowchart TD LVFS((LVFS Webservice)) -- "SBOM.html" --> User(End User) LVFS -- "md.[xml|jcat] š" --> CDN(Fastly CDN) CDN -- "md.[xml|jcat] š" --> User LVFS -- "embargo.[xml|jcat] š" --> User LVFS -- "fw.cab š" --> User User -. "report.json" .-> LVFS User -. "hsi.json" .-> LVFS QA(QA Teams) -- "report.json š" --> LVFS OEM(Device Vendor) -- "fw.cab" --> LVFS ODM(Device Manufacturer) -- "fw.[bin|cab]" --> OEM OEM -. "report.json š" .-> LVFS ODM -. "fw.cab" .-> LVFS IBV(BIOS Vendor) -- "fw.bin" --> ODM ISV(Silicon Vendor) -- "fw.bin" --> ODM User -. "md.xml š" .-> User2(Other LAN Users) User -. "fw.cab š" .-> User2 LVFS -- "FwHunt|Yara" --> SecAlert(Security Researchers)
In this diagram, the arrow shows the flow of data between different processes or machines.
Important things to note:
fwupdmgr and gnome-software should not be run as the root userremotes.d or config files, and should be readable only by rootfwupd-efi has to be signed by a trusted keyfwupdtool debug tool requires root access to perform updates on devicesflowchart TD subgraph Vendor OEM(OEM/ODM/ISV Firmware) end subgraph User fwupdmgr((fwupdmgr\ngnome-software)) end subgraph Local Network User fwupdmgr2((fwupdmgr\ngnome-software)) end subgraph Privileged fwupd((fwupd\ndaemon)) passim((passimd)) fwupdengine(FuEngine) fwupdtool(fwupdtool\ndebug\ntool) fwupd-efi(fwupd capsule loader) Pending[(history.db)] Kernel((OS Kernel)) ESP[(EFI\nSystem\nPartition)] SPI[(System SPI)] UsbDevice(USB Device) UsbDeviceEEPROM[(USB Device\nEEPROM)] State[(/var/lib/fwupd)] NVRAM[(Non-volatile\nRAM)] end subgraph Internet LVFS((LVFS\nInstance)) CDN(Fastly\nCDN) EFS[(Amazon\nEFS)] Postgres[(Amazon\nRDS)] Worker(Async Workers) end LVFS -- "fw.cab" --> Worker Worker -- "md.xml š" --> EFS EFS <-- "fw.cab š" --> Worker OEM -- "firmware.cab" --> LVFS LVFS -. "report.html" .-> OEM EFS <--> LVFS Postgres <--> Worker Postgres <--> LVFS fwupd <--> fwupdengine fwupdengine <-- "sqlite" --> Pending UsbDevice <-- "i²c" --> UsbDeviceEEPROM fwupdengine <-- "libusb" --> UsbDevice fwupdtool <---> fwupdengine fwupdengine <-- "ioctl()\nread()\nwrite()" --> Kernel fwupdengine -. "fwupdx64.efi" .-> ESP fwupdengine -- "fw.bin" --> ESP fwupdengine -- "fw.bin" --> Kernel fwupdengine -- "efivar" ---> Kernel Kernel -. "HSI attrs" .-> fwupdengine Kernel <-- "efivars" --> NVRAM fwupd-efi -- "fw.cap š" ---> SPI fwupd-efi <-- "efivars" --> NVRAM ESP --> fwupd-efi fwupdmgr -- "md.[xml|jcat] šš" --> fwupd fwupd -- "Devices\nHSI attrs\nReleases š" --> fwupdmgr fwupdmgr -- "fw.cab šš" --> fwupd CDN -- "md.[xml|jcat] š" --> fwupdmgr LVFS -- "md.[xml|jcat] š" --> CDN LVFS -- "fw.cab š" --> fwupdmgr LVFS -- "embargo.[xml|jcat] š" --> fwupdmgr fwupdmgr -. "report.json" .-> LVFS fwupdmgr -. "report.json š" .-> LVFS State <-- "fw.cab š" --> fwupd passim -. "md.md|fw.cab š\nmDNS with TLS" .-> fwupdmgr2 fwupd -. "md.md|fw.cab šš" .-> passim User ~~~~ Privileged Internet ~~~~~ User Vendor ~~~~~ Internet