CVE-2023-4001
Medium · 6.8CVSS
6.8
EPSS
0.5%
Published
Jan 15, 2024
CISA due date
—
Cloudanix analysis
Someone who can plug a USB stick into a Linux computer can sometimes get around the password that is supposed to stop people from changing how the computer starts up.
- Exploitation
- Physical Access
- Attacker needs
- Physical Access
- Complexity
- Moderate
- Impact
- Full Compromise
- Component
- Application
- Class
- Authentication Bypass
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Bypasses GRUB password protection on UEFI systems by causing GRUB to load its configuration from an attacker-controlled filesystem that shares the same UUID as the legitimate /boot filesystem.
Why it matters to the business
Attackers with brief physical access can alter boot settings, load unauthorized kernels, or disable security controls on affected Linux systems, increasing risk of full system compromise and data exposure; the flaw exists only in certain downstream distributions and has remained unpatched in listed products for over two years.
How an attack unfolds
An attacker identifies the UUID of the target /boot partition, prepares a USB drive containing a matching filesystem and a GRUB configuration without password protection, inserts the drive into a UEFI system, and reboots; because UEFI enumerates removable media first, GRUB discovers the duplicate UUID and loads the attacker-supplied configuration, bypassing the password check.
How to fix it
Apply any available downstream patches from Red Hat or Fedora that address the UUID-handling logic; where patches are unavailable, enforce physical security controls that prevent attachment of external media and consider disabling removable-device boot in UEFI firmware settings.
How to confirm the fix worked
Verify GRUB package version against distribution advisories; attempt controlled boot with a duplicate-UUID USB while monitoring whether the password prompt is presented; inspect /boot/grub/grub.cfg or equivalent for unexpected changes after test boots.
Typical attack path
- Reconnoiter target to obtain /boot filesystem UUID
- Format external USB media with identical UUID and a GRUB config lacking password enforcement
- Attach USB drive to powered-off or running UEFI target
- Trigger reboot or power cycle
- GRUB loads attacker config and grants unauthenticated access to the boot menu
How to detect it
Examine system boot logs, GRUB environment files, and any recorded console output for references to unexpected removable media or duplicate-UUID mounts; correlate physical-access logs or USB insertion events with subsequent boot configuration changes.
What your security team should do
- Treat physical access to systems as a high-priority control and restrict USB ports where feasible
- Monitor vendor security feeds for grub2 updates in Red Hat Enterprise Linux and Fedora and apply immediately upon release
- Document compensating controls such as UEFI boot-order restrictions and BIOS passwords for systems that cannot be patched
The record
An authentication bypass flaw was found in GRUB due to the way that GRUB uses the UUID of a device to search for the configuration file that contains the password hash for the GRUB password protection feature. An attacker capable of attaching an external drive such as a USB stick containing a file system with a duplicate UUID (the same as in the "/boot/" file system) can bypass the GRUB password protection feature on UEFI systems, which enumerate removable drives before non-removable ones. This issue was introduced in a downstream patch in Red Hat's version of grub2 and does not affect the upstream package.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:9 | grub2-common | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-efi-aa64 | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-efi-aa64-cdboot | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-efi-aa64-modules | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-efi-x64 | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-efi-x64-cdboot | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-efi-x64-modules | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-pc | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-pc-modules | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-ppc64le | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-ppc64le-modules | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-tools | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-tools-efi | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-tools-extra | 0 | 1:2.06-70.el9_3.2.alma.1 |
| AlmaLinux:9 | grub2-tools-minimal | 0 | 1:2.06-70.el9_3.2.alma.1 |
| Mageia:9 | grub2 | 0 | 2.06-28.2.mga9 |
| Red Hat:enterprise_linux:9::baseos | grub2 | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-common | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-debuginfo | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-debugsource | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-efi-aa64 | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-efi-aa64-cdboot | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-efi-aa64-modules | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-efi-x64 | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-efi-x64-cdboot | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-efi-x64-modules | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-emu-debuginfo | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-pc | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-pc-modules | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-ppc64le | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-ppc64le-modules | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-tools | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-tools-debuginfo | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-tools-efi | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-tools-efi-debuginfo | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-tools-extra | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-tools-extra-debuginfo | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-tools-minimal | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:enterprise_linux:9::baseos | grub2-tools-minimal-debuginfo | 0 | 1:2.06-70.el9_3.2 |
| Red Hat:rhel_eus:9.0::baseos | grub2 | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-common | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-debuginfo | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-debugsource | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-efi-aa64 | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-efi-aa64-cdboot | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-efi-aa64-modules | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-efi-x64 | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-efi-x64-cdboot | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-efi-x64-modules | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-emu-debuginfo | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-pc | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-pc-modules | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-ppc64le | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-ppc64le-modules | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-tools | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-tools-debuginfo | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-tools-efi | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-tools-efi-debuginfo | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-tools-extra | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-tools-extra-debuginfo | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-tools-minimal | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.0::baseos | grub2-tools-minimal-debuginfo | 0 | 1:2.06-27.el9_0.16 |
| Red Hat:rhel_eus:9.2::baseos | grub2 | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-common | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-debuginfo | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-debugsource | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-efi-aa64 | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-efi-aa64-cdboot | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-efi-aa64-modules | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-efi-x64 | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-efi-x64-cdboot | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-efi-x64-modules | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-emu-debuginfo | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-pc | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-pc-modules | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-ppc64le | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-ppc64le-modules | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-tools | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-tools-debuginfo | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-tools-efi | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-tools-efi-debuginfo | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-tools-extra | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-tools-extra-debuginfo | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-tools-minimal | 0 | 1:2.06-61.el9_2.2 |
| Red Hat:rhel_eus:9.2::baseos | grub2-tools-minimal-debuginfo | 0 | 1:2.06-61.el9_2.2 |
| Ubuntu:Pro:14.04:LTS | grub2-signed | 0 | No fix |
Related vulnerabilities
- CVE-2023-4692 An out-of-bounds write flaw was found in grub2's NTFS filesystem driver. Also affects grub2-common
- CVE-2023-4693 An out-of-bounds read flaw was found on grub2's NTFS filesystem driver. Also affects grub2-common
- CVE-2022-28736 There's a use-after-free vulnerability in grub_cmd_chainloader() function; The… Also affects grub2-common
- CVE-2022-28735 The GRUB2's shim_lock verifier allows non-kernel files to be loaded on shim-powered… Also affects grub2-common
- CVE-2022-28733 Integer underflow in grub_net_recv_ip4_packets; A malicious crafted IP packet can lead to… Also affects grub2-common
- CVE-2022-28734 Out-of-bounds write when handling split HTTP headers; When handling split HTTP headers… Also affects grub2-common
- CVE-2022-3775 When rendering certain unicode sequences, grub2's font code doesn't proper validate if… Also affects grub2-common
- CVE-2022-2601 A buffer overflow was found in grub_font_construct_glyph(). Also affects grub2-common