Why Embedded Software Supply Chain Security Fails Even With Secure Boot and an SBOM

Why Embedded Software Supply Chain Security Fails Even With Secure Boot and an SBOM

 

The device shipped on schedule. It passed the security review: firmware was signed, secure boot was enabled, and an SBOM sat in the repository next to the release tag.

Weeks later a CVE landed against a compression library that the product bundled somewhere in its dependency tree. The compliance team asked a simple question — which field units contain the vulnerable version, and can we show the shipped binary matches the SBOM we filed? Nobody could answer it quickly.

Two engineers checked out the release tag and rebuilt it. They got two different binaries. The signing key, it turned out, had lived on a shared CI server that several contractors could reach. And the SBOM had been generated from the source manifest, not from the image that was actually flashed at the factory.

None of that was a broken cipher. The signatures verified and secure boot worked. What had never been engineered was the layer where the firmware is built, signed, and provisioned — and that is where the supply chain was weak.

Quick Overview

Problem: Signed firmware, secure boot, and a generated SBOM pass a security review but do not produce the provenance a CRA conformity assessment relies on — or the answers a real supply-chain incident demands.

Common failure points: Non-reproducible builds, SBOMs generated from the source tree instead of the shipped image, signing keys exposed on the build server or the provisioning line, and no traceability from a disclosed CVE to the releases and units that carry it.

Where it appears: Connected industrial controllers and PLCs, routers and network equipment, IoT and edge gateways, and other software-bearing products placed on the EU market. Automotive and medical devices usually fall under separate sector regimes (motor-vehicle type-approval, MDR/IVDR) and sit outside CRA, but the same engineering practices apply.

Engineering focus: Reproducible builds, a build-bound SBOM validated against the shipped image, hardware-backed key custody, and vulnerability-handling traceability wired into CI/CD.

 

Wrong Assumption

The assumption behind most of these audits-gone-wrong is reasonable on its face: secure boot plus signed firmware plus an SBOM equals a secure supply chain. Those three controls answer real questions — is this code authentic, will only verified code run, and what is nominally inside it. But they say little about the provenance of what was built, the custody of the keys that signed it, or the ability to trace a disclosed vulnerability down to the releases and units carrying it. A device can have solid on-device cryptography and still struggle in a CRA conformity assessment and in a live incident, because both press on exactly that gap — the build pipeline and the provisioning line.

Why It Fails

Non-reproducible builds break provenance. If two clean checkouts of the same commit produce different binaries, there is no way to show the released image came from the reviewed source. Timestamps, absolute build paths, unpinned toolchain versions, and network-fetched dependencies all leak nondeterminism into the output. Reproducible containerized builds with pinned toolchains are the precondition for provenance — without them an SBOM describes an image nobody can reconstruct.

The SBOM describes source, not the shipped image. Many SBOMs are generated from a package manifest or a source scan, so they list what the build was supposed to include. The shipped image can diverge: statically linked transitive dependencies, vendored code copied into the tree, or a build flag that pulls a different library version. In SPDX or CycloneDX form the document looks complete, but it is answering a different question than the auditor is asking.

Signing keys leak on the build server or the line. A private signing key in a CI secret readable by every job, or handed to a contract manufacturer without hardware protection, is the highest-value target in the chain. Once it leaks, downstream controls collapse — an attacker signs firmware the device will happily accept. Holding the signing key in an HSM, so it is never exportable, is what keeps the chain of trust from having an unprotected core.

Vulnerability handling has no traceability. CRA requires manufacturers to handle vulnerabilities across the support period. In practice that means being able to answer, fast, which product releases — and ideally which field units — contain a newly disclosed CVE. Unit-level traceability is not spelled out in the law, but without at least a CVE-to-component-to-release link that answer becomes manual archaeology measured in days, not the hours a coordinated disclosure allows.

Secure boot without a real root of trust. Secure boot is only as strong as where its verification key is anchored. A public key or its hash belongs in immutable or one-time-programmable storage — boot ROM, eFuse, or OTP; TPMs and secure elements protect device identity and key material, and TrustZone can isolate the verification logic, depending on the SoC. Anchoring that first key in immutable hardware is what makes the first link resistant to software-level modification.

In practice these rarely arrive one at a time. A CVE disclosure exposes the traceability gap; the traceability gap forces a rebuild; the rebuild is not reproducible; the non-reproducible build cannot be tied to the filed SBOM. Stacked together, they turn a routine patch into a compliance scramble.

Hidden System Complexity

source repo → open-source & vendor dependencies → toolchain / compiler → CI build → SBOM generation → firmware signing (key custody) → factory provisioning / flashing → secure boot (device) → OTA update → field fleet → CVE disclosure → impact analysis → patch → rebuild & sign → staged OTA rollout → rollout monitoring

A problem seen at the field level usually originates several stages up. A CVE against a transitive dependency is invisible until someone maps it back through the build to a component version, then forward to the firmware releases and the units that carry it. Break any link — an SBOM that omits transitive dependencies, a build that cannot be reproduced, a provisioning step with no record of which key signed which batch — and the whole trace goes cold.

The manufacturing edge adds a second axis. Provisioning, key injection, and firmware flashing happen on a line the product team often does not control directly. That is the secure device provisioning and factory key injection layer: every unit leaves the line with the right identity, the right firmware, and a record of both.

Failure Patterns

Scenario 1. A connected industrial controller passes its security review with signed firmware and secure boot. During CRA readiness prep, the team cannot reproduce the released binary from the tagged commit — the CI image pulled an unpinned cross-compiler that has since moved a minor version. The filed SBOM no longer maps to any binary the team can rebuild, so the provenance claim is hard to defend before a single line of firmware is inspected.

Scenario 2. A medical-adjacent IoT gateway bundles a TLS library statically. A high-severity CVE is published against that library. The SBOM, generated from the top-level package manifest, never listed it as a transitive dependency, so automated CVE scanning reports the product as unaffected. The exposure is real; the paperwork says otherwise, and it surfaces only when a customer's own scanner flags the shipped binary.

Scenario 3. An OEM outsources flashing to a contract manufacturer and ships the production signing key as a file so the line can sign units. Months later, firmware signed with that key but never released by the OEM appears on grey-market devices. The devices accept it because secure boot is doing exactly what it was told: trust anything this key signs. The weak point was key handling on the line.

 

Embedded Security Engineering

Embedded supply-chain weaknesses — non-reproducible builds, source-only SBOMs, exposed signing keys, missing CVE traceability — are process and provenance problems, not cryptography problems. Closing them takes reproducible build pipelines, build-bound SBOMs, hardware-backed key custody, and a vulnerability-handling trail wired into CI/CD, not another penetration test on the finished device. Promwad engineers secure boot and OTA flows, SBOM-enabled release pipelines, controlled embedded build environments, device identity, and secure provisioning for connected products, aligned with CRA-readiness practices.

Explore Embedded Security Engineering →

Embedded Security Platforms and Technology Ecosystem

 

When Secure Boot and an SBOM Are Not Enough

Illustrative composite scenario, not a single documented client project — it combines patterns Promwad sees across connected-device programs.

Consider a connected industrial gateway on an Arm Cortex-A class SoC with an on-board secure element. Firmware is signed, secure boot chains from the SoC's immutable boot ROM, and an SBOM is generated in CycloneDX on every build. A product like this clears an internal security review without an issue.

CRA readiness is where it gets harder. The conformity work needs two things such a project often has never produced: defensible evidence that the shipped binary matches the reviewed source, and a way to answer, per CVE, which releases and units are affected. Typically neither exists. The build runs in an ad-hoc CI environment with an unpinned toolchain, so the release image cannot be reproduced; the SBOM is generated from the source manifest and omits statically linked transitive dependencies; and there is no index tying a firmware release to the units flashed with it.

The remediation is a build-and-provisioning fix: a reproducible containerized build with a pinned toolchain and locked dependencies, an SBOM regenerated during the controlled build and validated against the final image, the signing key moved off the CI server into a server-side HSM, and a CVE-to-release-to-unit index built from the provisioning records. Secure boot and the signing scheme stay untouched — they are the parts already working. Work like this is usually measured in weeks and needs no hardware change; the gaps are in the build pipeline and key handling, not in the boot chain.

embedded-software-supply-chain

Solution Approach

Step 1: Make the build reproducible and bind the SBOM to it. Pin the exact compiler, SDK, and dependency versions in a containerized CI image, strip build-path and timestamp nondeterminism, and generate the SBOM during that controlled build from the resolved dependency graph and package metadata — then validate it against the final firmware image. A build that produces different binaries on different machines has no provenance, and a version-controlled, reproducible toolchain is where that gap closes before any SBOM tooling is bolted on top.

Step 2: Keep signing keys in a server-side HSM and provision identity at the line. Hold the private signing key in an HSM where it cannot be exported, so firmware is signed without the raw key ever touching a build server or CI secret. At the factory, provisioning injects the public verification key and a per-device identity into each unit's secure element, and logs every batch against the firmware version and key used. On outsourced lines this secure-element provisioning discipline is a requirement, not a contractual footnote.

Step 3: Wire CVE-to-fleet traceability into the pipeline. Store each SBOM against its firmware release and each release against the units provisioned with it, then run continuous dependency scanning against CVE feeds so a new disclosure resolves to an affected-component, affected-release, and (where records allow) affected-unit list. This does not add a CRA requirement; it makes CRA vulnerability handling workable and cuts response time from days to hours.

A CVE that takes days to map to a fleet is a traceability gap before it is anything else. The pipeline sets how fast you can answer "who is affected"; if the SBOM, the release, and the provisioning record are not linked, nothing downstream shortens that answer.

Real Trade-Offs

Reproducible builds remove provenance ambiguity but demand a locked, containerized toolchain and disciplined dependency pinning — real setup cost, and friction every time a dependency has to move. On regulated products that cost is recovered at the first audit and the first CVE response.

A hardware secure element or TPM anchors the root of trust and protects keys, but adds BOM cost, provisioning complexity, and a firmware integration path. For high-volume consumer devices a well-managed OTP-fused key may be enough; for industrial and networking products the secure element usually earns its place.

A build-bound SBOM validated against the shipped image is far more useful than a source-manifest SBOM, but it has to be regenerated and re-validated on every build, which only works once the build is reproducible. Bolting SBOM tooling onto a non-reproducible pipeline produces a document that looks compliant and proves little.

Where the product also carries a functional-safety case — IEC 61508 or, for vehicles, ASPICE and ISO 26262 — the supply-chain provenance trail and the safety assurance case can reuse the same configuration-management and release-traceability backbone, but the safety and cybersecurity artifacts remain distinct evidence with distinct goals and should not be treated as one deliverable.

Typical Supply-Chain Security Tasks

Reproducible Build & SBOM Provenance

Containerized CI with pinned toolchains and deterministic build flags; a build-time SBOM from the resolved dependency graph, in SPDX or CycloneDX, validated against the final image and bound to each release.

Secure Boot & Root-of-Trust Integration

Chain-of-trust bring-up from immutable boot ROM or a secure element through bootloader, kernel, and application, with anti-rollback.


Key Custody & Secure Provisioning

HSM-backed signing, factory key injection, per-device identity, and per-batch signing records across in-house and contract manufacturing lines.

Vulnerability-Handling Pipeline

CVE-to-component-to-release-to-unit traceability, continuous dependency scanning, VEX triage, and a CRA-aligned reporting workflow.

Qualifying Symptoms

  • Two clean checkouts of the same commit produce different firmware binaries.
  • The SBOM comes from a source manifest, so transitive or statically linked dependencies are missing from it.
  • A new CVE takes days of manual work to map to affected products and units.
  • The production signing key lives on a build server, in a CI secret, or as a file handed to a contract manufacturer.
  • Secure boot is enabled, but the verification key is anchored in rewritable storage rather than OTP, a TPM, or a secure element.
  • There is no record tying a firmware release to the specific units flashed with it on the line.
  • Dependency scanning reports a component as absent that the shipped binary actually contains.

At this point the work is build-pipeline and provisioning engineering, not another cryptographic review of the finished device. In practice: a reproducible build, a build-bound SBOM validated against the image, hardware-backed key custody, and a CVE-to-fleet traceability trail.

For products on embedded Linux or a custom kernel, the Linux and kernel engineering layer is often where provenance is won or lost — the build system, the BSP, and the dependency graph all originate there. Where the update path is the exposure, a chain-of-trust update pipeline closes the loop from signing to install. And if none of this is wired into how software is verified, QA and test automation will confirm the firmware works without ever confirming it can be traced.

This class of problem shows up most in connected industrial and networking products and IoT gateways where teams built solid on-device cryptography early but treated the build pipeline and provisioning line as integration details — and then hit a CRA deadline or a coordinated CVE disclosure that demanded provenance they had never produced. Automotive and medical teams meet the same engineering problem under their own sector regimes.

 

FAQ

What is an SBOM, and which format should embedded teams use?

 

A Software Bill of Materials is a machine-readable inventory of every component in a build, including name, version, supplier, and dependency relationships. The two dominant formats are SPDX, an ISO/IEC standard with strong support for licensing and provenance, and CycloneDX, from OWASP, with strong support for security and dependency detail. SWID tags are older and less common in embedded systems. What matters most is the source: generate the SBOM during a controlled build from the resolved dependency graph, cover transitive dependencies, validate it against the shipped image, and regenerate it on every build. Otherwise it describes an image you cannot actually ship.
 

What does secure boot guarantee — and what doesn't it?

 

Secure boot guarantees that only code signed by a trusted key runs, with each stage verifying the next from an anchored root of trust. It does not guarantee that the signed code is free of vulnerabilities, that the signing key is safe, or that you can show where the image came from. It answers whether the image is authentic, not whether it is known-good or fully traceable. Treat it as one control in the chain, anchored in immutable hardware, not as the whole supply-chain story.
 

What does the CRA actually require, and by when?

 

The EU Cyber Resilience Act, Regulation (EU) 2024/2847, entered into force on 10 December 2024 and applies to products with digital elements sold in the EU. Products already covered by sector rules such as motor-vehicle type-approval and the medical-device regulations, MDR and IVDR, are excluded. It requires secure-by-design engineering, vulnerability handling across the support period, an SBOM covering at least the top-level dependencies in a machine-readable format, secure update distribution, and technical documentation. Vulnerability and incident reporting, notified to the designated CSIRT coordinator and ENISA through a single platform, begins on 11 September 2026, with an early warning within 24 hours and a fuller notification within 72 hours. The main obligations apply from 11 December 2027. Penalties reach up to €15 million or 2.5% of global annual turnover. Reproducible builds, binary-validated SBOMs, and unit-level traceability are not verbatim CRA mandates, but they are engineering practices that strengthen the evidence CRA does require and shorten vulnerability response time.
 

How do we make an embedded firmware build reproducible?

 

Pin the toolchain, SDK, and every dependency to exact versions inside a containerized CI image, remove nondeterminism from timestamps, absolute build paths, and file ordering, and fetch dependencies from a controlled mirror rather than the live internet at build time. The test is simple: two clean builds of the same commit on different machines produce byte-identical binaries. Only then does an SBOM tied to that build actually prove provenance.
 

A CVE just dropped for a library we use — how fast can we respond?

 

That depends on your traceability, not your cryptography. If each SBOM is stored against its firmware release and each release is mapped to the units provisioned with it, a new CVE resolves quickly to an affected component, affected release, and affected unit list, and a VEX statement tells you whether the vulnerable code is even reachable. Without that trail, it becomes manual work across repositories and build logs, which takes days rather than hours, exactly the window a coordinated disclosure does not give you.
 

Related Engineering Cases

Review Your Embedded Supply Chain Security

Discuss your build pipeline, firmware-signing flow, SBOM coverage, provisioning process, and CRA readiness with our embedded security engineers.

Tell us about your project

We’ll review it carefully and get back to you with the best technical approach.

All information you share stays private and secure — NDA available upon request.

Prefer direct email?
Write to info@promwad.com

Secured call with our expert in 24h
Secured call with our expert in 24h
Secured call with our expert in 24h
Plug-in model for your full-cycle R&D
Secured call with our expert in 24h
22 years of engineering expertise
Secured call with our expert in 24h
500+ projects for OEMs in EU & US
Secured call with our expert in 24h
MVP in 8–10 weeks — predictable delivery
Secured call with our expert in 24h
Featured at IBC, Embedded World, MWC