The Intel ME (Management Engine) firmware needs to be updated from time to time. Unfortunately, the update tool is often provided only as a Windows executable. Some pre-existing workarounds for Linux users are as follows:
- Linux versions of the
FWUpdLcl
update tool are available in the WinRAID forum, but this is an unofficial source, so it is hard to be entirely sure about the safety and suitability of these executables. - Windows PE (Preinstallation Environment) can be started from a USB thumb drive and the official update utility can be run inside it. The problem with this, is that proprietary software will have access to your drives, the network, etc., which you might not want.
Is there any way to update the Intel ME firmware without jeopardizing the security of my computer?
Run WinPE in a virtual machine with PCI passthrough
One way to update the Intel ME firmware is to run Windows PE (Preinstallation Environment) in a virtual machine and give it access to the Intel ME Interface (MEI / HECI) PCI device on the host. The Intel ME firmware can then be updated from within this environment.
Features of this solution:
Warning: The proprietary software will have access to the Intel ME Interface (MEI / HECI). It is unclear what kind of access this gives to the system, but it could potentially give access to the RAM and to any encrypted drives in their unlocked states, since this is the level of access Intel ME has to the system. So this solution could potentially be even less secure than running the Windows image on bare metal, since the drives would not be in an unlocked state in that case. Use at your own risk. This passage from an EFF article could be relevant, though: "AMT access is not the same as running arbitrary ME code, so attackers can't access system memory directly; they have to use the console, VNC, or boot OS images to accomplish their goals." A workaround could be to boot Ubuntu from a USB thumb drive and run WinPE in a virtual machine there.
The solution presented here has been tested on an ASUS Pro WS W680-ACE motherboard with Ubuntu 24.04.
Make a Windows PE image
Download the necessary files
Prepare files (example)
Make the image
The parent directories of the image need particular permission settings in order for virt-manager to be able to access the image, so the make-winpe script creates a world-readable /tmp/iso directory and places the image there.
Run the image in a virtual machine
Set up a virtual machine in virt-manager:
Screenshot of FWUpdLcl64.exe running in WinPE in virt-manager
Files
make-winpe
This script is based on https://wiki.archlinux.org/title/Windows_PE.
start_script.cmd
Convert the file to DOS format (CRLF):
overlay/README.txt
Convert the file to DOS format (CRLF):