Knowledge · STM32

Vulnerabilities in STM32Cube middleware: lwIP, mbedTLS, FreeRTOS

STM32CubeF4 v1.28.3 ships mbedTLS 2.16.2, for which the NVD lists 39 CVEs, none of them in the CISA KEV catalogue.

STM32CubeU5 and H5 ship mbedTLS 3.6.6 and ThreadX with NetX Duo 6.4.0, for which the NVD lists 19 CVEs. Which version your device carries is in the package headers and, in the build, in the ELF.

As of 23 October 2026 · 8 min readYou make the conformity statement. This page and our reports provide technical findings as its basis.

The test subject
Package
STM32CubeF4, release v1.28.3 of 23 July 2025
Directory
Middlewares/Third_Party
Comparison
stm32-mw-lwip, tag v2.1.3_20230818 (ST's fix)

STMicroelectronics/STM32CubeF4 on GitHub, tag v1.28.3

The test subject: STMicroelectronics/STM32CubeF4 on GitHub, tag v1.28.3

Which middleware versions does ST ship in STM32Cube?

Besides HAL and CMSIS, an STM32Cube package brings libraries from other vendors. Their versions are in the headers and in the file st_readme.txt of each middleware, where ST records every update. Read at the tags on GitHub, as of 23 October 2026. The packages for F4, F7 and H7 build on FreeRTOS and lwIP, the newer ones for U5 and H5 on ThreadX with NetX Duo.

PackageMiddleware versions according to the headers
STM32CubeF4 v1.28.3FreeRTOS V10.3.1, lwIP 2.1.2, mbedTLS 2.16.2, FatFs R0.12c
STM32CubeF7 v1.17.4FreeRTOS V10.2.1, lwIP 2.1.2, mbedTLS 2.16.2
STM32CubeH7 v1.13.0At the Git tag: FreeRTOS V10.3.1, lwIP 2.1.2, mbedTLS 2.16.2. Release notes and master branch: FreeRTOS V10.6.2, lwIP 2.2.1.
STM32CubeWB v1.24.0FreeRTOS V10.6.2, ThreadX 6.4.0, FatFs R0.12c
STM32CubeU5 v1.9.0, STM32CubeH5 v1.7.0mbedTLS 3.6.6, ThreadX, NetX Duo, USBX and FileX 6.4.0 each
What CubeF4 ships under Third_Party
ls Middlewares/Third_Party

Output

FatFs
FreeRTOS
LibJPEG
LwIP
mbedTLS
lwIP version in CubeF4
grep -E "#define LWIP_VERSION_(MAJOR|MINOR|REVISION)" LwIP/src/include/lwip/init.h

Output

#define LWIP_VERSION_MAJOR      2
#define LWIP_VERSION_MINOR      1
#define LWIP_VERSION_REVISION   2
mbedTLS version in CubeF4
grep "MBEDTLS_VERSION_STRING " mbedTLS/include/mbedtls/version.h

Output

#define MBEDTLS_VERSION_STRING         "2.16.2"
When ST last updated lwIP in CubeF4
grep -n "### 15-March-2019\|Upgrade to use LwIP V2.1.2" LwIP/st_readme.txt

Output

54:### 15-March-2019 ###
56:  + Upgrade to use LwIP V2.1.2 version

STM32CubeH7: What do the Git tag and the release notes say?

For some versions now, ST has included the middleware as Git submodules. For STM32CubeH7 v1.13.0 of 24 February 2026, the release notes and the SBOM file sbom_cdx.json name FreeRTOS V10.6.2 and lwIP 2.2.1. The submodule at Git tag v1.13.0, however, points to the ST tags v10.3.1_20200831 and v2.1.2_20190315. Anyone who fetches the package at the tag with git clone --recurse-submodules builds lwIP 2.1.2 with CVE-2020-22283 and CVE-2020-22284, and FreeRTOS 10.3.1 with three CVSS 9.8 vulnerabilities.

Only a commit on the master branch of 27 March 2026 moves the submodules to the newer states. What counts is the state in the project.

Submodules at tag v1.13.0
git ls-tree v1.13.0 Middlewares/Third_Party/ | grep -E "LwIP|FreeRTOS"

Output

160000commit 5fe3a380e5eadb6ce0a5149725210c3fe70d1c15	Middlewares/Third_Party/FreeRTOS160000commit f0d19c3a6e7420248775b5163b8dbf1fc2371331	Middlewares/Third_Party/LwIP
Submodules on master
git ls-tree master Middlewares/Third_Party/ | grep -E "LwIP|FreeRTOS"

Output

160000commit e41c220a37adbb55b59dca704def6e73d6258b95	Middlewares/Third_Party/FreeRTOS160000commit 07680c8172fa5fc135adefa3f7711c14f4938dc9	Middlewares/Third_Party/LwIP

What has ST published on the lwIP CVEs?

In security advisory SA0037 of 9 April 2025, ST names the lwIP vulnerabilities CVE-2020-22283 and CVE-2020-22284 as relevant for STM32CubeF1, F2, F4, F7 and H7, for F4 up to v1.28.1. Affected is lwIP 2.1.2 and earlier, fixed from 2.1.3. ST provides the fix in a repository of its own; the device manufacturer has to build it in.

ST adds: “Because the issue might not be fixed in subsequent version, refer to the release notes of the affected product to check if the issue has been fixed.” The newer F4 package v1.28.3 still contains lwIP 2.1.2, and the line that ST's fix changes is unchanged in it:

The five lwIP CVEs from 2026 (SNMPv3, MQTT, SMTP, mDNS, API) affect 2.1.2 and 2.2.1 as well, according to the CNA. On 23 October 2026 their fixes exist only on lwIP's master branch, in none of the ST copies checked: F4, F7 and H7 at the tag and on master, there ST tag v2.2.1_20250804.

zepif.c in CubeF4 v1.28.3 against ST's fix
curl -s https://raw.githubusercontent.com/STMicroelectronics/stm32-mw-lwip/v2.1.3_20230818/src/netif/zepif.c | diff LwIP/src/netif/zepif.c -

Output

204c204
<   err = pbuf_take_at(q, p->payload, p->tot_len, sizeof(struct zep_hdr));
---
>   err = pbuf_copy_partial_pbuf(q, p, p->tot_len, sizeof(struct zep_hdr));

Which CVEs does each component have?

The NVD count per version, checked on 23 October 2026, with the highest-rated vulnerabilities. None of them is in the CISA catalogue of actively exploited vulnerabilities. Whether a vulnerability can be exploited in the device depends on whether the affected function is built and reachable.

Component and version in the packageCVEs according to the NVD, the main ones, CVSS
lwIP 2.1.2 (F4, F7, H7 at the tag)NVD: CVE-2020-22284 (ZEP interface for 6LoWPAN), 7.5. CVE-2020-22283 (ICMPv6), according to ST up to 2.1.2, 7.5. Per CNA in addition CVE-2026-8836 (SNMPv3) and CVE-2026-87121 (MQTT), 9.8 each.
lwIP 2.2.1 (H7 on master)NVD: none. Per CNA five CVEs from 2026, four of them 8.8 or higher.
mbedTLS 2.16.2 (F4, F7, H7)39 CVEs, 5 of them 9.0 or higher: CVE-2021-44732, CVE-2022-46393 (DTLS), CVE-2025-47917, 9.8 each; CVE-2022-35409 (DTLS), CVE-2026-34872 (FFDH), 9.1 each. In addition, according to the project, CVE-2026-49300 and CVE-2026-50580. The 2.16 line gets no more fixes.
mbedTLS 3.6.6 (U5, H5)1 CVE in the NVD. 3.6.7 of 7 July 2026 fixes vulnerabilities from 19 security advisories whose CVEs are still missing from the NVD.
FreeRTOS V10.3.1 (F4, H7 at the tag), V10.2.1 (F7)9 CVEs each: CVE-2021-31571 (queue.c), CVE-2021-31572 (stream_buffer.c), CVE-2021-32020 (heap), all before 10.4.3, 9.8 each. The rest only for MPU ports and TrustZone.
FreeRTOS V10.6.2 (WB, H7 on master)4 CVEs, all only for MPU ports and TrustZone, highest 8.8 (CNA). Fix 11.3.1.
NetX Duo 6.4.0 (U5, H5)19 CVEs, 2 of them 9.0 or higher: CVE-2025-55086 (DHCPv6 client), 9.8, and CVE-2025-55081 (TLS ClientHello), 9.1, both before 6.4.4. For Eclipse's current version 6.5.2 the NVD lists none.
ThreadX 6.4.0 (U5, H5, WB)4 CVEs, highest CVE-2025-55080, 7.1: system call parameters are not checked enough when memory protection is on, before 6.4.3.
USBX 6.4.0, FileX 6.4.0 (U5, H5)USBX: 1 CVE, CVE-2025-55095 (partition table of a USB storage device, recursion until stack overflow), 7.0. FileX: 1 CVE, CVE-2025-55089 (RAM disk driver), 9.8, before 6.4.2.
FatFs R0.12c (F4, WB)6 CVEs from 2026, highest 7.6: CVE-2026-6682 (integer overflow in mount_volume() with FAT32), CVE-2026-6687 (exFAT label), CVE-2026-6688 (long file names). Five of them affect every version up to R0.16.

Has ST changed ThreadX and NetX Duo since 6.4.0?

In U5 v1.9.0 and H5 v1.7.0, ST ships ThreadX, NetX Duo, USBX and FileX in version 6.4.0, which ST took over on 19 April 2024. Eclipse has released up to 6.5.2 since then, for NetX Duo most recently on 13 October 2026. The st_readme.txt of the NetX Duo copy names no security fix since the upgrade to 6.4.0; its entries concern drivers, documentation and the list of licensed parts. The FileX copy notes on 11 August 2025: “SA0038 issue is fixed”.

For a device with a DHCPv6 client or a TLS server from NetX Duo this means: check the code of the copy. The version and st_readme.txt name no fix for the two vulnerabilities with CVSS 9.0 or higher.

What does ST say about mbedTLS in SB0033?

ST does not publish a CVE list of its own for mbedTLS. Bulletin SB0033 says that the security advisories of TrustedFirmware.org apply to the STM32Cube packages with mbedTLS, and names as the remedy: reconfigure the package with a fixed mbedTLS version from the mbedTLS website. Which version is in the package is again in st_readme.txt.

For the packages with 2.16.2 there is no fixed version of the same line. 2.16.12 of 17 December 2021 was the last release; the path leads to 3.6.

How do I find out which version my device carries?

  1. 1

    Determine the package version

    the line ProjectManager.FirmwarePackage in the .ioc file.

  2. 2

    Read the middleware versions

    headers and st_readme.txt of each library in the project. For a clone from GitHub, also git submodule status, because the state can differ from the release notes.

  3. 3

    Check what is linked

    the symbol table of the ELF or AXF. A library that leaves no function in the image is not in the device.

  4. 4

    Check the configuration

    IPv6, 6LoWPAN, DTLS, SNMPv3, MQTT, DHCPv6 and other options decide whether a vulnerability is built at all.

  5. 5

    Build in the fix

    take over the fixed library, even if the Cube package itself still carries the old version.

What can I do?

  1. 1

    lwIP 2.1.2: move to ST tag v2.1.3_20241213 or newer in the repository stm32-mw-lwip; that fixes CVE-2020-22283 and CVE-2020-22284. For SNMPv3, MQTT, SMTP and mDNS, take over the commits from lwIP's master branch.

  2. 2

    mbedTLS 2.16.2: move to 3.6.7. In U5 and H5 from 3.6.6 to 3.6.7.

  3. 3

    FreeRTOS V10.2.1 and V10.3.1: move to at least 10.4.3. ST offers the states v10.6.2 and v11.2.0 in the repository stm32-mw-freertos.

  4. 4

    NetX Duo, ThreadX, FileX and USBX 6.4.0: build in the current Eclipse ThreadX version or take over the fixes one by one.

  5. 5

    Check the CISA KEV catalogue for actively exploited vulnerabilities.

Can this run automatically?

LegacyMind reads the built-in libraries with their versions from the ELF or AXF of your build, for example lwIP, mbedTLS and FreeRTOS from STM32Cube, and matches them against the public vulnerability sources, with a note on whether a vulnerability is actively exploited. If the file evidences no version, the field stays blank.

Questions

Is my device affected if it uses STM32CubeF4 v1.28.3?

It carries the versions for which the NVD lists these vulnerabilities, provided the library is linked. Whether a vulnerability can be exploited depends on whether the affected function is built and reachable, for example IPv6 or DTLS.

Does an update of the Cube package fix the vulnerabilities?

Not automatically. ST itself points out that a newer package need not contain the fix. STM32CubeF4 v1.28.3 still carries lwIP 2.1.2 and mbedTLS 2.16.2. Check the release notes or build in the fixed library yourself.

Which versions are in STM32CubeH7 v1.13.0?

That depends on where the package comes from. At Git tag v1.13.0 the submodules point to FreeRTOS V10.3.1 and lwIP 2.1.2. The release notes, the SBOM and the master branch name FreeRTOS V10.6.2 and lwIP 2.2.1. mbedTLS is 2.16.2 in both cases.

Is the middleware in ST's SBOM?

In STM32CubeF4 v1.28.3 the SBOM file sbom_cdx.json names none of the libraries lwIP, mbedTLS, FreeRTOS or FatFs. In STM32CubeH7 v1.13.0 and U5 v1.9.0 they are listed, for H7 with versions that do not match the Git tag. Your SBOM has to take them from your build.

Is any of these vulnerabilities actively exploited?

As of 23 October 2026 none of them is in the CISA catalogue of actively exploited vulnerabilities (catalogue version 2026.10.23, 1,756 entries).

Sources

  1. [1]ST SA0037: Impacts of LwIP CVE-2020-22283 and CVE-2020-22284
  2. [2]ST SB0033: Applicability of MbedTLS vulnerabilities on STM32Cube packages
  3. [3]STMicroelectronics: stm32-mw-lwip, v2.1.3_20230818
  4. [4]STMicroelectronics: STM32CubeF4, release v1.28.3
  5. [5]STMicroelectronics: STM32CubeH7, tag v1.13.0
  6. [6]Mbed TLS: security advisories
  7. [7]Eclipse ThreadX: NetX Duo, security advisories
  8. [8]NVD: CVE-2020-22284

Check your own image

Upload one firmware image, an AXF or a supplier SBOM in your own LegacyMind account. Report and SBOM within three working days, NDA on request. The app and the reports are in German; questions in English are welcome.