CVE-2023-40547
High · 8.3CVSS
8.3
EPSS
5.4%
Published
Jan 25, 2024
CISA due date
—
Cloudanix analysis
A flaw in boot software can let an attacker who controls the network during startup take over the entire machine before the operating system even loads.
- Exploitation
- Adjacent Network
- Attacker needs
- Other
- Complexity
- High
- Impact
- Full Compromise
- Component
- Firmware
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
The flaw causes Shim to trust attacker-supplied values while parsing an HTTP response during network boot, resulting in an out-of-bounds write primitive that grants complete control of the early-boot execution environment.
Why it matters to the business
Successful exploitation during network boot can lead to full system compromise of any machine relying on the affected boot infrastructure, creating high-risk exposure for large-scale deployments that use PXE or HTTP boot servers.
How an attack unfolds
An attacker must first obtain a man-in-the-middle position or compromise the boot server, then craft a malicious HTTP response containing specially chosen values that trigger the out-of-bounds write when Shim parses the response, resulting in arbitrary code execution before the operating system loads.
How to fix it
Upgrade rhboot/shim to commit 5914984a1ffeab841f482c791426d7ca9935a5e6 or later; rebuild and redeploy any custom Shim binaries; restrict network boot traffic to trusted servers only.
How to confirm the fix worked
Confirm the fixed commit hash is present in the Shim source or binary; test network boot against a patched build to verify the vulnerable parsing path is no longer reachable.
Typical attack path
- Position as MITM or compromise the HTTP/PXE boot server
- Intercept or serve a malicious HTTP response during early boot
- Trigger out-of-bounds write via crafted response values
- Execute attacker-controlled code in the pre-OS environment
How to detect it
Review boot-server access and HTTP response logs for unexpected or malformed responses around boot events; examine any systems that fail to boot or exhibit unusual early-boot behavior after network exposure.
What your security team should do
- Apply the referenced commit to all Shim instances used for network boot
- Harden or replace any boot servers that serve HTTP responses to Shim
- Disable network boot where not strictly required
- Monitor boot-server logs for anomalous HTTP responses
The record
A remote code execution vulnerability was found in Shim. The Shim boot support trusts attacker-controlled values when parsing an HTTP response. This flaw allows an attacker to craft a specific malicious HTTP request, leading to a completely controlled out-of-bounds write primitive and complete system compromise. This flaw is only exploitable during the early boot phase, an attacker needs to perform a Man-in-the-Middle or compromise the boot server to be able to exploit this vulnerability successfully.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| AlmaLinux:8 | shim-aa64 | 0 | 15.8-4.el8_9.alma.1 |
| AlmaLinux:8 | shim-ia32 | 0 | 15.8-4.el8_9.alma.1 |
| AlmaLinux:8 | shim-x64 | 0 | 15.8-4.el8_9.alma.1 |
| AlmaLinux:9 | shim-aa64 | 0 | 15.8-4.el9_3.alma.1 |
| AlmaLinux:9 | shim-x64 | 0 | 15.8-4.el9_3.alma.1 |
| Debian:10 | shim | 0 | 15.8-1~deb10u1 |
| Debian:11 | shim | 0 | 15.8-1~deb11u1 |
| Debian:12 | shim | 0 | 15.8-1~deb12u1 |
| Debian:13 | shim | 0 | 15.8-1 |
| Red Hat:enterprise_linux:7::client | mokutil | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::client | mokutil-debuginfo | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::client | shim | 0 | 0:15.8-3.el7 |
| Red Hat:enterprise_linux:7::client | shim-ia32 | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::client | shim-signed | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::client | shim-unsigned-ia32 | 0 | 0:15.8-3.el7 |
| Red Hat:enterprise_linux:7::client | shim-unsigned-x64 | 0 | 0:15.8-3.el7 |
| Red Hat:enterprise_linux:7::client | shim-x64 | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::server | mokutil | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::server | mokutil-debuginfo | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::server | shim | 0 | 0:15.8-3.el7 |
| Red Hat:enterprise_linux:7::server | shim-ia32 | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::server | shim-signed | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::server | shim-unsigned-ia32 | 0 | 0:15.8-3.el7 |
| Red Hat:enterprise_linux:7::server | shim-unsigned-x64 | 0 | 0:15.8-3.el7 |
| Red Hat:enterprise_linux:7::server | shim-x64 | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::workstation | mokutil | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::workstation | mokutil-debuginfo | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::workstation | shim | 0 | 0:15.8-3.el7 |
| Red Hat:enterprise_linux:7::workstation | shim-ia32 | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::workstation | shim-signed | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:7::workstation | shim-unsigned-ia32 | 0 | 0:15.8-3.el7 |
| Red Hat:enterprise_linux:7::workstation | shim-unsigned-x64 | 0 | 0:15.8-3.el7 |
| Red Hat:enterprise_linux:7::workstation | shim-x64 | 0 | 0:15.8-1.el7 |
| Red Hat:enterprise_linux:8::baseos | shim | 0 | 0:15.8-4.el8_9 |
| Red Hat:enterprise_linux:8::baseos | shim-aa64 | 0 | 0:15.8-4.el8_9 |
| Red Hat:enterprise_linux:8::baseos | shim-ia32 | 0 | 0:15.8-4.el8_9 |
| Red Hat:enterprise_linux:8::baseos | shim-x64 | 0 | 0:15.8-4.el8_9 |
| Red Hat:enterprise_linux:9::baseos | shim | 0 | 0:15.8-4.el9_3 |
| Red Hat:enterprise_linux:9::baseos | shim-aa64 | 0 | 0:15.8-4.el9_3 |
| Red Hat:enterprise_linux:9::baseos | shim-x64 | 0 | 0:15.8-4.el9_3 |
| Red Hat:rhel_aus:8.2::baseos | shim | 0 | 0:15.8-2.el8_2 |
| Red Hat:rhel_aus:8.2::baseos | shim-ia32 | 0 | 0:15.8-2.el8_2 |
| Red Hat:rhel_aus:8.2::baseos | shim-x64 | 0 | 0:15.8-2.el8_2 |
| Red Hat:rhel_aus:8.4::baseos | shim | 0 | 0:15.8-2.el8_4 |
| Red Hat:rhel_aus:8.4::baseos | shim-ia32 | 0 | 0:15.8-2.el8_4 |
| Red Hat:rhel_aus:8.4::baseos | shim-x64 | 0 | 0:15.8-2.el8_4 |
| Red Hat:rhel_e4s:8.2::baseos | shim | 0 | 0:15.8-2.el8_2 |
| Red Hat:rhel_e4s:8.2::baseos | shim-ia32 | 0 | 0:15.8-2.el8_2 |
| Red Hat:rhel_e4s:8.2::baseos | shim-x64 | 0 | 0:15.8-2.el8_2 |
| Red Hat:rhel_e4s:8.4::baseos | shim | 0 | 0:15.8-2.el8_4 |
| Red Hat:rhel_e4s:8.4::baseos | shim-ia32 | 0 | 0:15.8-2.el8_4 |
| Red Hat:rhel_e4s:8.4::baseos | shim-x64 | 0 | 0:15.8-2.el8_4 |
| Red Hat:rhel_eus:8.6::baseos | shim | 0 | 0:15.8-2.el8_6 |
| Red Hat:rhel_eus:8.6::baseos | shim-aa64 | 0 | 0:15.8-2.el8_6 |
| Red Hat:rhel_eus:8.6::baseos | shim-ia32 | 0 | 0:15.8-2.el8_6 |
| Red Hat:rhel_eus:8.6::baseos | shim-x64 | 0 | 0:15.8-2.el8_6 |
| Red Hat:rhel_eus:8.8::baseos | shim | 0 | 0:15.8-2.el8 |
| Red Hat:rhel_eus:8.8::baseos | shim-aa64 | 0 | 0:15.8-2.el8 |
| Red Hat:rhel_eus:8.8::baseos | shim-ia32 | 0 | 0:15.8-2.el8 |
| Red Hat:rhel_eus:8.8::baseos | shim-x64 | 0 | 0:15.8-2.el8 |
| Red Hat:rhel_eus:8.8::crb | shim-unsigned-x64 | 0 | 0:15.8-2.el8 |
| Red Hat:rhel_eus:9.0::appstream | shim-unsigned-aarch64 | 0 | 0:15.8-2.el9 |
| Red Hat:rhel_eus:9.0::baseos | shim | 0 | 0:15.8-3.el9 |
| Red Hat:rhel_eus:9.0::baseos | shim-aa64 | 0 | 0:15.8-3.el9 |
| Red Hat:rhel_eus:9.0::baseos | shim-x64 | 0 | 0:15.8-3.el9 |
| Red Hat:rhel_eus:9.0::crb | shim-unsigned-x64 | 0 | 0:15.8-2.el9 |
| Red Hat:rhel_eus:9.2::baseos | shim | 0 | 0:15.8-3.el9_2 |
| Red Hat:rhel_eus:9.2::baseos | shim-aa64 | 0 | 0:15.8-3.el9_2 |
| Red Hat:rhel_eus:9.2::baseos | shim-x64 | 0 | 0:15.8-3.el9_2 |
| Red Hat:rhel_tus:8.2::baseos | shim | 0 | 0:15.8-2.el8_2 |
| Red Hat:rhel_tus:8.2::baseos | shim-ia32 | 0 | 0:15.8-2.el8_2 |
| Red Hat:rhel_tus:8.2::baseos | shim-x64 | 0 | 0:15.8-2.el8_2 |
| Red Hat:rhel_tus:8.4::baseos | shim | 0 | 0:15.8-2.el8_4 |
| Red Hat:rhel_tus:8.4::baseos | shim-ia32 | 0 | 0:15.8-2.el8_4 |
| Red Hat:rhel_tus:8.4::baseos | shim-x64 | 0 | 0:15.8-2.el8_4 |
| SUSE:Enterprise Storage 7.1 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise High Performance Computing 15 SP2-LTSS | shim | 0 | 15.8-150100.3.38.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP3-LTSS | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Micro 5.1 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Micro 5.2 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Micro 5.3 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Micro 5.4 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Micro 5.5 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Module for Basesystem 15 SP5 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Server 12 SP5 | shim | 0 | 15.8-25.30.1 |
| SUSE:Linux Enterprise Server 15 SP2-LTSS | shim | 0 | 15.8-150100.3.38.1 |
| SUSE:Linux Enterprise Server 15 SP3-LTSS | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Server for SAP Applications 12 SP5 | shim | 0 | 15.8-25.30.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP2 | shim | 0 | 15.8-150100.3.38.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP3 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Manager Proxy 4.3 | shim | 0 | 15.8-150300.4.20.2 |
| SUSE:Manager Server 4.3 | shim | 0 | 15.8-150300.4.20.2 |
| Ubuntu:14.04:LTS | shim | 0 | No fix |
| Ubuntu:14.04:LTS | shim-signed | 0 | No fix |
| Ubuntu:16.04:LTS | shim | 0 | No fix |
| Ubuntu:16.04:LTS | shim-signed | 0 | No fix |
| Ubuntu:18.04:LTS | shim | 0 | No fix |
| Ubuntu:18.04:LTS | shim-signed | 0 | No fix |
| Ubuntu:20.04:LTS | shim | 0 | No fix |
| Ubuntu:20.04:LTS | shim | 0 | 15.8-0ubuntu1 |
| Ubuntu:20.04:LTS | shim-signed | 0 | No fix |
| Ubuntu:20.04:LTS | shim-signed | 0 | 1.40.10 |
| Ubuntu:22.04:LTS | shim | 0 | No fix |
| Ubuntu:22.04:LTS | shim | 0 | 15.8-0ubuntu1 |
| Ubuntu:22.04:LTS | shim-signed | 0 | No fix |
| Ubuntu:22.04:LTS | shim-signed | 0 | 1.51.4 |
| Ubuntu:24.04:LTS | shim | 0 | 15.8-0ubuntu1 |
| Ubuntu:24.04:LTS | shim-signed | 0 | 1.58 |
| Ubuntu:24.10 | shim | 0 | 15.8-0ubuntu1 |
| Ubuntu:24.10 | shim-signed | 0 | 1.58 |
| Ubuntu:Pro:14.04:LTS | shim | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | shim-signed | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | shim | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | shim-signed | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | shim | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | shim-signed | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | shim | 0 | No fix |
| Ubuntu:Pro:20.04:LTS | shim-signed | 0 | No fix |
| openSUSE:Leap 15.5 | shim | 0 | 15.8-150300.4.20.2 |
| openSUSE:Leap Micro 5.3 | shim | 0 | 15.8-150300.4.20.2 |
| openSUSE:Leap Micro 5.4 | shim | 0 | 15.8-150300.4.20.2 |
Related vulnerabilities
- CVE-2023-40548 A buffer overflow was found in Shim in the 32-bit system. Also affects shim-aa64
- CVE-2022-28736 There's a use-after-free vulnerability in grub_cmd_chainloader() function; The… Also affects shim-aa64
- CVE-2022-28735 The GRUB2's shim_lock verifier allows non-kernel files to be loaded on shim-powered… Also affects shim-aa64
- CVE-2022-28733 Integer underflow in grub_net_recv_ip4_packets; A malicious crafted IP packet can lead to… Also affects shim-aa64
- CVE-2022-28734 Out-of-bounds write when handling split HTTP headers; When handling split HTTP headers… Also affects shim-aa64
- CVE-2021-3695 A crafted 16-bit grayscale PNG image may lead to a out-of-bounds write in the heap area. Also affects shim-aa64
- CVE-2024-2312 GRUB2 does not call the module fini functions on exit, leading to Debian/Ubuntu's peimage… Also affects shim
- CVE-2021-3981 A flaw in grub2 was found where its configuration file, known as grub.cfg, is being… Also affects shim