Device manufacturers · Cyber Resilience Act

Firmware SBOM for the CRA, from your Keil, IAR or Linux build

Since 11 September 2026, device manufacturers report actively exploited vulnerabilities within 24 hours, also for devices already in the field. From 11 December 2027, every product newly placed on the market or substantially modified needs a machine-readable SBOM.

You upload the file your build produces. Back come the linked libraries with their versions, the known vulnerabilities and the missing hardening, as an SBOM and a findings report. Without source code.

As of 20 October 2026 · Cyber Resilience Act, Regulation (EU) 2024/2847

Vulnerabilities view of the app for the public STM32F429 firmware of a measuring device: FreeRTOS 10.3.1 with 9 actionable CVEs, expanded, including CVE-2021-31571, CVE-2021-31572 and CVE-2021-32020 at CVSS 9.8 and CVE-2024-28115 at 8.8
Measuring device STM32F429 · Vulnerabilities tab (the app is in German) · public firmware (STM32CubeIDE, TouchGFX, ELF), analysed on 22 October 2026

What the CRA requires

Three dates that set your schedule

The Cyber Resilience Act applies to every product with digital elements that has a data connection to a device or a network (Art. 2(1)). For firmware, that almost always means your device is in scope.

The legal text and references are under CRA and NIS2.

  1. 10 December 2024

    In force

    Twenty days after publication in the Official Journal.
  2. 11 September 2026

    Reporting obligation, Art. 14

    Also for devices already on the market (Art. 69(3)).
  3. 11 December 2027

    All requirements

    Annex I, SBOM, CE marking (Art. 71(2)).
Support
A support period of at least five years, unless the product is expected to be in use for a shorter time (Art. 13(8)).
Fines
For infringements of Annex I, Art. 13 or Art. 14: up to EUR 15 million or 2.5% of worldwide annual turnover, whichever is higher (Art. 64(2)).
Cyber Resilience Act, Regulation (EU) 2024/2847, Official Journal. Checked on 20 October 2026.

The reporting obligation

Three deadlines once you know of an exploited vulnerability

If a vulnerability in your product is actively exploited, three deadlines run from the moment you become aware of it (Art. 14(2)). The report goes at the same time to the CSIRT designated as coordinator and to ENISA (Art. 14(1)).

You can only report what you know: which releases contain the component, and in which version. That is in an SBOM per release.

24hours
Early warning notification, after you become aware of the exploited vulnerability
72hours
Vulnerability notification with the product, the nature of the exploitation and the corrective or mitigating measures taken
14days
Final report, after a correction or mitigation is available

A device placed on the market before 11 December 2027 only has to meet the requirements if it is substantially modified afterwards (Art. 69(2)). The reporting obligation applies regardless (Art. 69(3)).

Is your device in scope?

Default, class I, class II or critical

The class decides who assesses conformity. It changes nothing about the SBOM and the reporting obligation: those apply to every class. Products with their own rules are excluded, such as medical devices and vehicles with type approval (Art. 2(2)).

  • Default

    Any device with a data connection that is on neither list: controllers, sensors, measuring instruments, drives.
    Self-assessment by the manufacturer.
  • Class I, Annex III

    Among others routers, modems and switches, microcontrollers and microprocessors with security-related functions, operating systems, smart home alarm systems and door locks.
    Self-assessment only if you fully apply harmonised standards, common specifications or a European certification (Art. 32(2)).
  • Class II, Annex III

    Firewalls, intrusion detection systems, tamper-resistant microcontrollers and microprocessors.
    EU-type examination or full quality assurance with a notified body, or a European cybersecurity certificate.
  • Critical, Annex IV

    Smart meter gateways, smart cards and secure elements, hardware devices with security boxes.
Annexes III and IV of the regulation, shortened. Checked on 20 October 2026.

What you upload

The file your build produces anyway

The AXF, ELF or OUT with debug information yields the most: it holds libraries, paths and versions. A BIN from the same build gets that build's components when the AXF comes with it.

  • No source code, no access to your systems.
  • You upload the file yourself, into your own account.
  • What happens to it afterwards is described under Security.
.elf .axf .out
Keil MDK, IAR, GNU ArmComponents, versions, vulnerabilities
.hex .ihex .s19 .srec
Intel HEX, Motorola S-RecordComponents, as far as the bytes evidence them
.bin
Raw image for the flashComponents, as far as the bytes evidence them
.zip .tar .gz .tgz
Embedded Linux, as shippedComponents, versions, vulnerabilities
Every format by file extension: /en/formats

What comes back

Your firmware, as the app shows it

A public Keil project, ble_freertos_amota.axf, analysed on our platform. 6 components, 3 with an evidenced version. Where the file carries no version, the field stays blank, and the component stays in the list.

Components and SBOM

Every component with its version, its origin in the build and its CVEs. The export delivers CycloneDX, SPDX 2.3 and SPDX 3.0.1.

Finding on the RTOS kernel

FreeRTOS 10.1.1

CVEs reported
6
with code in the build
2
in the KEV catalogue
0

FreeRTOS 10.4.3 fixes the 2 with code in the build; all 6 need FreeRTOS 11.3.1. Code in the build: the AXF's symbol table, checked with nm (finding).

Components table of the app for the public Keil project ble_freertos_amota.axf, sorted by vulnerabilities: FreeRTOS 10.1.1 at critical severity with 6 CVEs
Radio module Apollo3 · Components tab, by vulnerabilities · public Keil MDK build ble_freertos_amota.axf (Arm Cortex-M4), analysed on 22 October 2026

Hardening with evidence and remedy

Which protection mechanisms are missing in the image, how you can tell, and how to fix it in the next build. Here: stack canary, MPU, privilege separation.

  • Stack canary

    No __stack_chk_guard, no __stack_chk_fail in the symbol table.
  • MPU

    No MPU_ symbol; the build uses the port portable/Keil/AMapollo2.
  • Privilege separation

    Without the MPU port every task runs privileged; no xPortRaisePrivilege in the symbol table.
Hardening view of the app for the Keil build: stack protection (canary), memory protection (MPU) and privilege separation are missing, each with the evidence in the image, the evidence level and the way to fix it; the RTOS stack overflow check is active
Radio module Apollo3 · Hardening tab · public Keil MDK build ble_freertos_amota.axf (Arm Cortex-M4), analysed on 22 October 2026

Obligation and evidence

What the analysis contributes to your obligations

The app maps the findings to the obligations they give evidence for, and it also says what a firmware analysis cannot evidence: processes and documentation remain your job.

Regulatory view of the app: four CRA manufacturer obligations for the Keil build, each with its status and next step: machine-readable SBOM can be evidenced, vulnerability handling and known exploitable vulnerabilities need action, proof of remediation is organisational
Radio module Apollo3 · Regulatory tab, CRA manufacturer obligations · public Keil MDK build ble_freertos_amota.axf (Arm Cortex-M4), analysed on 22 October 2026
  • Reporting obligation, Art. 14

    When a vulnerability is exploited, the first question is which shipped releases contain the component. With an SBOM per release, that is one search.
  • SBOM, Annex I, Part II, point (1)

    The SBOM as CycloneDX or SPDX, from the file your build produces, with the version wherever the file carries it.
  • No known exploitable vulnerabilities, Annex I, Part I, point (2)(a)

    Every component with a version is matched against the public vulnerability databases, with its severity and a note on whether the vulnerability is already being exploited.
  • Bought-in code, Art. 13(5)

    Your supplier's SBOM with CVE matching, on the same device, next to the inventory we read from your image.

If you already have an SBOM

What your existing SBOM does not cover

Some manufacturers already produce SBOMs, for the Radio Equipment Directive or from the package manager, for example. The question is whether the list matches the file that runs on the device.

The SBOM a chip vendor ships with its package describes the package. The SBOM from the source tree names what sits in the repository. What the linker actually took in is only in the build.

  • Import your SBOM. You upload your existing CycloneDX or SPDX file to the device. We match it against vulnerabilities, and it sits next to the inventory we read from the image.
  • Per release. Every shipped firmware version gets its own SBOM. Then one search answers which releases contain an affected library.

Five checks for your own SBOM: Checking an existing SBOM.

74

components named in the package's SBOM

0 of 5

bundled libraries among them

Middlewares/Third_Partyin the package's SBOM
FreeRTOSno
mbedTLSno
LwIPno
FatFsno
LibJPEGno

STM32CubeF4 v1.28.3 ships FreeRTOS, mbedTLS, LwIP, FatFs and LibJPEG under Middlewares/Third_Party. The package's SBOM names 74 components, none of these five.

STM32CubeF4 v1.28.3: Middlewares/Third_Party and the package's SBOM.

Questions from the first call

What heads of development want to know first

Does this really work without source code, even for plain C projects?

Yes. A Keil, IAR or GCC build writes library names, paths and versions into the file it produces. In the public Keil example, the path with FreeRTOS and its version appears 406 times in the AXF. We read the components from that, without you handing over any code.

Which file should we upload, the AXF or the BIN?

The AXF, ELF or OUT of the build: it names the linked libraries, and a Keil or GNU Arm build also their versions. A BIN on its own yields only what its own bytes evidence. Upload both from the same build and the BIN gets the AXF's components.

A release or a development build?

For the obligations, what you ship is what counts: start with the release that is in the field. A development build shows you earlier what is in the next release. We treat both files as equally confidential.

Does the reporting obligation also apply to devices already sold?

Yes. Since 11 September 2026, Art. 14 also applies to products placed on the market before 11 December 2027 (Art. 69(3)). The other requirements only reach such a device if it is substantially modified after that date.

Is the SBOM from the STM32Cube package or the Keil pack enough?

Not for your device. It describes the package the chip vendor ships. The SBOM of STM32CubeF4 v1.28.3, for example, names none of the five libraries the package ships under Middlewares/Third_Party. Your SBOM names what your build linked.

Can we check our suppliers' SBOMs?

Your suppliers' SBOMs in CycloneDX (JSON, XML) or SPDX (JSON, tag-value, SPDX 3.0 JSON-LD), up to 64 MB. We detect the format from the content. Every component with a CPE, distribution or repository identifier is matched against the vulnerability sources. Matching for npm, PyPI and Maven packages follows.

Does the SBOM have to be published?

No. It is part of the technical documentation. The market surveillance authority can ask for it in a reasoned request (Annex VII, point 8, recital 77).

CycloneDX or SPDX?

The regulation asks for a commonly used machine-readable format and names none. LegacyMind exports CycloneDX 1.6, SPDX 2.3 and SPDX 3.0.1 as JSON, plus CSV.

Is the report proof of conformity?

No. It is technical evidence for your technical documentation: what is in the firmware, which vulnerabilities attach to it, which protection mechanisms are missing. As the manufacturer, you make the declaration of conformity.

Your build, one findings report

The CRA readiness check is free. You get the report and SBOM within three working days of the upload.