Engineer working on a laptop connected to a device test rig, surrounded by wiring harnesses and test hardware

Firmware vulnerabilities & fixes

U-Boot bootloader security for embedded firmware, explained

Last updated:

U-Boot bootloader security means the concrete configuration choices — FIT image signature verification, a locked-down console, and write-protected environment variables — that decide whether U-Boot, the open-source bootloader running on most embedded Linux, IoT and industrial devices, actually stops unauthorized code from running before the operating system starts. It matters because U-Boot executes earlier and at a higher privilege level than any OS-level defense can reach: a device left at permissive defaults turns a few seconds of serial or local access into persistent, OS-invisible control of the entire boot chain, and three separate CVEs disclosed between 2018 and 2025 show that this is a recurring, exploited weakness class rather than a theoretical one.

This guide draws on U-Boot's own official documentation (docs.u-boot.org), NVD's CVE records, and CISA's ICS advisory ICSA-25-343-01, each read directly for this guide on 9 November 2026.

Key takeaways

  • This guide draws on U-Boot's own official documentation (docs.u-boot.org), NVD's CVE records, and CISA's ICS advisory ICSA-25-343-01, each read directly for this guide on 9 November 2026.
  • What this buys you is narrower than "secure boot" as a marketing phrase implies.
  • A correctly signed FIT image is moot if an attacker never has to go through it.
  • Three disclosures, seven years apart, show this is a recurring bug class rather than a one-off.

What does U-Boot actually verify, and what does it leave to you?

U-Boot's Verified Boot documentation defines the goal plainly: verifying "all software loaded into a machine during the boot process to ensure that it is authorised and correct for that machine," extending "from the moment of system reset to as far as you wish into the boot process." The mechanism is the Flat Image Tree (FIT) format's signing feature, and U-Boot's FIT Signature Verification documentation spells out the procedure in four steps on the signing side (hash an image in the FIT, sign the hash with a private key, store the signature in the FIT) and a matching four on the verification side (read the FIT, obtain the public key, extract the signature, verify it against a freshly computed hash). Enabling it is not automatic: the docs list CONFIG_FIT_SIGNATURE (enables signing and verification in FITs) plus CONFIG_RSA or CONFIG_ECDSA (the signing algorithm) as required, and — a detail directly relevant to the vulnerabilities below — the same page now carries an explicit warning that "the legacy image format is default disabled by not defining CONFIG_LEGACY_IMAGE_FORMAT" when relying on signed FIT images, because that older format sits outside the signature check entirely.

What this buys you is narrower than "secure boot" as a marketing phrase implies. It proves the image presented to U-Boot was signed by whoever holds the private key; it does not prove that key was handled correctly, that every image format on the device actually requires a signature, or that nothing else in the boot chain (environment variables, console access) can redirect execution before a signature is ever checked. The three CVEs below are each a case of exactly that gap, not a cryptographic break.

How do you harden U-Boot's console and environment variables?

A correctly signed FIT image is moot if an attacker never has to go through it. U-Boot's Environment Variables documentation defines bootdelay — the delay "before automatically running bootcmd" — with three distinct values: a positive number autoboots but "can be stopped by key input," -1 disables autoboot entirely, and -2 autoboots "with no delay and not check[s] for abort." Most devices ship with the first option, which is exactly the hole a local attacker with UART or serial access uses: interrupt autoboot, land in the U-Boot shell, and from there read or rewrite bootargs, point bootcmd at an attacker-supplied image, or dump device memory directly — all before the kernel, and any security feature it enforces, has even started.

Three concrete hardening moves, in order of how much they cost you in legitimate recoverability:

  1. Require a secret to stop autoboot, not just any keypressU-Boot's CONFIG_AUTOBOOT_KEYED option requires a specific stop string — optionally hashed (SHA-256 or crypt) rather than stored in the clear — before autoboot can be interrupted at all, closing the "anyone with a serial cable" case without removing the console outright.
  2. Protect the environment variables that control what bootsbootcmd is itself just another environment variable; if it can be rewritten from a running OS (via fw_setenv or equivalent) or overwritten by anyone who reaches the U-Boot shell, signature verification on the image it points to is beside the point. Restricting which variables are writable, or storing the environment as read-only where runtime changes are never needed, closes that path.
  3. Disable autoboot interruption entirely (`bootdelay = -1` or `-2`) where no field-recovery workflow depends on itThis is the strongest setting and the one with the real tradeoff: it also removes the legitimate debug/recovery access a field technician or RMA process might need, so it is a product-level decision, not a default to flip blindly.

What real U-Boot vulnerabilities have bypassed these protections?

Three disclosures, seven years apart, show this is a recurring bug class rather than a one-off. CVE-2018-3968, found by Cisco Talos, affected U-Boot 2013.07-rc1 through 2014.07-rc2: NVD describes the affected versions as lacking "proper FIT signature enforcement, which allows an attacker to bypass U-Boot's verified boot and execute an unsigned kernel, embedded in a legacy image format" — precisely the gap the current documentation's CONFIG_LEGACY_IMAGE_FORMAT warning now exists to close. CVE-2020-10648 is narrower and more recent: NVD's description is that Das U-Boot through 2020.01 "allows attackers to bypass verified boot restrictions and subsequently boot arbitrary images by providing a crafted FIT image to a system configured to boot the default configuration" — a case where the signature mechanism itself existed but a specially built image still evaded it.

The third is a different failure mode again. CVE-2025-24857, published in CISA's ICS advisory ICSA-25-343-01 (Update A), is an improper access control for volatile memory containing boot code, affecting U-Boot before 2017.11 on several Qualcomm IPQ-series chipsets used in networking gear. It has nothing to do with FIT signatures: CISA's advisory describes an attacker tampering with boot code sitting in volatile memory, then triggering execution of that tampered code "during the next boot cycle," gaining code execution at bootloader privilege. CISA's recommended fix is to upgrade to U-Boot v2025.4 or later, paired with physical hardening — restricting physical access and sealing exposed debug/USB ports — since the attack requires physical or local access to begin with.

A workable hardening checklist

  1. Confirm `CONFIG_FIT_SIGNATURE` is actually enabledin your U-Boot build, not just assumed from a vendor datasheet — verify the running configuration, not the marketing claim.
  2. Explicitly disable the legacy image format(do not define CONFIG_LEGACY_IMAGE_FORMAT) if any FIT images on the device are signed and required — otherwise an unsigned legacy-format image remains a valid, unchecked path to execution, as CVE-2018-3968 demonstrated in practice.
  3. Set `bootdelay` deliberately, not by defaultUse CONFIG_AUTOBOOT_KEYED with a hashed stop string at minimum; use -1/-2 where no legitimate workflow needs an interactive console.
  4. Lock down which environment variables are writable, especially bootcmd and bootargs, so a compromised OS or a local attacker at the console cannot redirect the boot chain even if the image itself would have been correctly verified.
  5. Match the U-Boot version against known CVEs before shipping, the same way you would for any other firmware component — CVE-2018-3968, CVE-2020-10648 and CVE-2025-24857 are each fixed in a specific later release, and a device built from an older U-Boot checkout carries that exact, already-public bypass.

How does SoftWSP's AI-assisted analysis help?

On a firmware image a customer uploads, SoftWSP's pipeline extracts the component inventory (SBOM) — including the U-Boot version string and build configuration where the image exposes one — and matches it against known U-Boot CVEs, flagging a version that predates the fix for CVE-2018-3968, CVE-2020-10648, CVE-2025-24857, or any other tracked U-Boot advisory. That automated SBOM-and-CVE-matching step is engineer-reviewed before it reaches a report, and it is genuinely useful for triage at scale: it tells you fast whether a specific firmware image ships a U-Boot build with a known, fixed vulnerability. It does not replace a manual review of that device's actual boot-chain configuration — whether CONFIG_FIT_SIGNATURE is enabled, whether the legacy image format is disabled, whether bootdelay and environment write permissions are hardened — because none of that is visible from a version number alone; a device can run a fully patched U-Boot release and still ship with verified boot turned off or autoboot left wide open.

For the broader concept U-Boot's FIT signing is one implementation of, see Secure boot and hardware root of trust, explained; for a real-world case of a different bootloader's verified boot failing for a key-management reason rather than a software bug, see PKfail: the UEFI Secure Boot test-key vulnerability. The resilience model for what should happen after a verification failure is covered in NIST SP 800-193: Platform Firmware Resiliency, independent testing approaches for verifying a device's actual boot-chain configuration (not just its vendor's claim) are covered in OWASP's firmware security testing methodology, and the regulatory expectation that a product protect code and data integrity is explained in CRA Annex I, explained.

SoftWSP's Device & Firmware Security service reviews U-Boot's actual shipped configuration — FIT signing, console and environment hardening, and version-against-CVE matching — against a device's real firmware image rather than a vendor's "secure boot enabled" claim: see Device & Firmware Security.

This guide summarizes U-Boot's own official documentation, NVD's CVE-2018-3968, CVE-2020-10648 and CVE-2025-24857 records, and CISA's ICS advisory ICSA-25-343-01 (Update A), each read directly for this guide on 9 November 2026. It is not a substitute for a specific device's own U-Boot build configuration review or a vendor's current firmware advisory.

Put this guide to work

Frequently asked questions

What is U-Boot, and why does its bootloader security matter?

Das U-Boot ("the Universal Boot Loader", almost always just called U-Boot) is the open-source, second-stage bootloader that runs on the large majority of embedded Linux, IoT and industrial devices between power-on and the operating system kernel starting. Bootloader security matters specifically because U-Boot runs earlier and at a higher privilege level than anything the OS can see or defend — U-Boot's own Verified Boot documentation frames the goal as verifying "all software loaded into a machine during the boot process to ensure that it is authorised and correct for that machine," starting from the moment of reset. A device with U-Boot left at its permissive defaults — autoboot interruptible by anyone with serial or UART access, environment variables writable from the running OS, no signature check on the next stage — turns a few seconds of physical or local access into persistent control of everything that boots afterward, including a chain that otherwise looks secure from the OS up.

What does U-Boot's verified boot actually check, and what can still go wrong?

U-Boot's Flat Image Tree (FIT) format supports both hashing (detects corruption) and signing (detects substitution): U-Boot's own FIT Signature Verification documentation describes the procedure as hash an image in the FIT, sign the hash with a private key, and store the signature in the FIT — verified at boot by reading the FIT, obtaining the public key, and checking the signature against a freshly computed hash. Two real CVEs show where this goes wrong in practice rather than in theory. CVE-2020-10648 is described by NVD as allowing "attackers to bypass verified boot restrictions and subsequently boot arbitrary images by providing a crafted FIT image to a system configured to boot the default configuration" — the check existed but a crafted image could still evade it. CVE-2018-3968, found by Cisco Talos, is older and structural: NVD describes it as a flaw in versions 2013.07-rc1 to 2014.07-rc2 that "lack proper FIT signature enforcement, which allows an attacker to bypass U-Boot's verified boot and execute an unsigned kernel, embedded in a legacy image format" — a second, unsigned image format sitting alongside the signed one. U-Boot's current signature documentation reflects that exact lesson learned: it now warns that relying on signed FIT images requires the legacy image format to be explicitly disabled, since it is not covered by the signature check at all.

How do you stop someone from just interrupting autoboot and getting a U-Boot shell?

U-Boot's own Environment Variables documentation defines the `bootdelay` variable as the delay "before automatically running bootcmd," with three distinct behaviours: a positive value autoboots but "can be stopped by key input," `-1` "disable[s] autoboot" entirely, and `-2` autoboots "with no delay and not check[s] for abort." The first setting is what most devices ship with, and it is the problem: any value that leaves a window for key input leaves a window for a local attacker with UART or serial access to drop into the U-Boot console and run arbitrary boot commands — set `bootargs` to disable kernel security features, point `bootcmd` at an attacker-supplied image over network or USB, or dump memory directly. U-Boot's `CONFIG_AUTOBOOT_KEYED` mechanism raises the bar by requiring a specific stop string (optionally a SHA-256 or crypt-hashed password) instead of any keypress, and `-1`/`-2` remove the interactive window outright at the cost of removing a legitimate recovery path too — the real engineering tradeoff is recovery access versus attack surface, not a free hardening step.

What real-world U-Boot vulnerabilities have let attackers bypass verified boot or boot code protections?

Beyond the two FIT-signature bypasses above, CISA's ICS advisory ICSA-25-343-01 (Update A) documents a different class of bootloader weakness entirely: CVE-2025-24857, an "improper access control for volatile memory containing boot code" affecting U-Boot before version 2017.11 on several Qualcomm IPQ-series chipsets used in networking equipment. The mechanism CISA describes does not touch FIT signatures at all — it is about memory protection: an attacker able to tamper with boot code sitting in volatile memory can have that tampered code execute on the next boot cycle, at bootloader privilege. CISA's advisory recommends upgrading to U-Boot v2025.4 or later and, since the attack vector is physical, pairs the software fix with physical hardening (securing or epoxy-sealing exposed ports). Taken together with CVE-2018-3968 and CVE-2020-10648, the pattern across seven years of disclosures is the same: U-Boot's verified boot and memory-protection mechanisms work as designed when correctly configured and kept current, and every confirmed real-world bypass found a gap in that configuration or an unpatched version, not a break in the underlying cryptography.

How does SoftWSP's AI-assisted analysis help with U-Boot bootloader security?

On a firmware image a customer uploads, SoftWSP's pipeline extracts the component inventory (SBOM) — including the U-Boot version string and build configuration where the image exposes one — and matches it against known U-Boot CVEs such as the three above, flagging a version that predates the fix for CVE-2018-3968, CVE-2020-10648, CVE-2025-24857 or any other tracked U-Boot advisory. That automated SBOM-and-CVE-matching step, engineer-reviewed before it reaches a report, is genuinely useful for triage at scale: it tells you fast whether a specific firmware image ships a U-Boot build with a known, fixed vulnerability. It does not replace a manual review of that device's actual boot-chain configuration — whether `CONFIG_FIT_SIGNATURE` is enabled, whether the legacy image format is disabled, whether `bootdelay` and the environment's write permissions are hardened — because none of that is visible from a version number alone; a device can run a patched U-Boot release and still ship with verified boot turned off or autoboot wide open.

Sources

  1. U-Boot Verified Boot — official documentation (concept, signing and chaining of trust)
  2. U-Boot FIT Signature Verification — official documentation (signing/verification procedure, CONFIG_FIT_SIGNATURE, legacy image format warning)
  3. U-Boot Environment Variables — official documentation (bootdelay, bootcmd semantics)
  4. NVD: CVE-2018-3968 — Das U-Boot verified boot bypass via legacy image format (Cisco Talos, versions 2013.07-rc1–2014.07-rc2)
  5. NVD: CVE-2020-10648 — Das U-Boot verified boot bypass via crafted FIT image on default configuration (through 2020.01)
  6. NVD: CVE-2025-24857 — U-Boot improper access control for volatile memory containing boot code
  7. CISA ICS Advisory ICSA-25-343-01 (Update A) — Universal Boot Loader (U-Boot)
Was this guide helpful?

In this cluster

U-Boot bootloader security for embedded firmware, explained