Knowledge · Bare metal

mbedTLS vulnerabilities by version: the CVE list per release line

mbedTLS 2.16.2 from STM32Cube: 39 CVEs in the NVD. The maintained LTS lines are 3.6 and 4.1.

The low count for 3.6.6 is misleading: 3.6.7 fixes vulnerabilities from 19 security advisories whose CVEs are still missing from the NVD. In the source the version sits in the macro MBEDTLS_VERSION_STRING.

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

At a glance
In STM32CubeF4, F7, H7
2.16.2
NVD CVEs for 3.6.5
11, 4 of them 9.0 or higher
Newest version
4.2.0 of 7 July 2026
3.6 LTS maintained until
March 2027
4.1 LTS maintained until
March 2029

NVD, queried 23 October 2026

How many CVEs does the NVD list for my mbedTLS version?

Counted are CVEs whose NVD configuration lists the version as vulnerable. Queried on 23 October 2026 through the NVD API, with every CPE name under which the NVD lists mbedTLS, rejected entries excluded. The CVSS score is the NVD's, otherwise the secondary score in the NVD record, for most recent mbedTLS CVEs the one from CISA-ADP. In brackets: which package ships this version.

The count is a version range. Whether a vulnerability can be exploited in the device depends on whether the affected function is built and reachable.

Version, release dateCVEs in the NVD, of which CVSS 9.0 or higher
2.16.2, 19 June 2019 (STM32CubeF4 v1.28.3, F7 v1.17.4, H7 v1.13.0)39 CVEs, 5 of them 9.0 or higher
2.16.12, 17 December 2021 (last 2.16)23 CVEs, 4 of them 9.0 or higher
2.28.0, 17 December 202125 CVEs, 5 of them 9.0 or higher
2.28.8 (NXP MCUXpresso SDK 2.16)18 CVEs, 3 of them 9.0 or higher
2.28.10, 24 March 2025 (last 2.28; NXP MCUXpresso SDK 25.12.00)15 CVEs, 3 of them 9.0 or higher
3.0.0, 7 July 202125 CVEs, 6 of them 9.0 or higher
3.5.2, 26 January 2024 (last 3.5)28 CVEs, 8 of them 9.0 or higher
3.6.0, 28 March 202426 CVEs, 8 of them 9.0 or higher
3.6.3, 24 March 2025 (NXP SDK 25.12.00, second copy)20 CVEs, 5 of them 9.0 or higher
3.6.4, 30 June 2025 (Zephyr v4.2.2)13 CVEs, 4 of them 9.0 or higher
3.6.5, 15 October 2025 (ESP-IDF v5.4.4, Zephyr v3.7.2)11 CVEs, 4 of them 9.0 or higher
3.6.6, 31 March 2026 (STM32CubeU5 v1.9.0, H5 v1.7.0, Zephyr v4.3.1)1 CVE in the NVD. 3.6.7 fixes vulnerabilities from 19 further security advisories.
3.6.7, 7 July 2026 (ESP-IDF v5.2.8, v5.3.6, v5.5.6; NXP SDK 26.09.00)1 CVE (CVE-2025-66442, CVSS 5.1, only with the LLVM optimisation select-optimize)
4.0.0, 15 October 20257 CVEs, 2 of them 9.0 or higher
4.1.0, 31 March 2026 (ESP-IDF v6.1, Zephyr v4.4.2, NXP SDK 26.06.00-LTS)None in the NVD. According to the security advisories affected by, for example, CVE-2026-49300 and CVE-2026-50580, fixed in 4.1.1.
4.1.1 and 4.2.0, 7 July 2026 (ESP-IDF v6.0.3; NXP SDK 26.09.00)None in the NVD. According to the project's advisory, CVE-2025-66442 (select-optimize only) affects all versions. For CVE-2026-25832, CVE.org names 4.0.0 to before 4.1.2, while the 4.1.1 release notes list the fix; there is no version 4.1.2 on 23 October 2026.

Which mbedTLS version do STM32Cube, the NXP SDK, ESP-IDF and Zephyr ship?

Read from version.h or build_info.h at the published tags, as of 23 October 2026. Espressif, Zephyr and NXP maintain forks of their own. The header names the version the copy is based on.

The STM32 packages for F4, F7 and H7 ship 2.16.2 from 2019. The line has had no fixes since 2.16.12. Two vulnerabilities of July 2026 affect, according to the project, every version up to 3.6.6, so 2.16 and 2.28 as well: CVE-2026-49300 and CVE-2026-50580. There is no fix for these lines.

Package, releasembedTLS version according to the header
STM32CubeF4 v1.28.3, F7 v1.17.4, H7 v1.13.02.16.2
STM32CubeU5 v1.9.0, H5 v1.7.03.6.6 (folder Middlewares/Third_Party/mbed-crypto)
NXP MCUXpresso SDK 26.09.004.2.0 with TF-PSA-Crypto 1.2.0, plus 3.6.7 as a second copy
NXP MCUXpresso SDK 26.06.00-LTS4.1.0, plus 3.6.6
NXP MCUXpresso SDK 25.12.002.28.10, plus 3.6.3
ESP-IDF v6.14.1.0
ESP-IDF v6.0.34.1.1
ESP-IDF v5.5.6, v5.3.6, v5.2.83.6.7
ESP-IDF v5.4.43.6.5
Zephyr v4.4.24.1.0
Zephyr v4.3.13.6.6
Zephyr v3.7.2 (LTS)3.6.5

Which mbedTLS vulnerabilities count first?

A selection by CVSS and reach. The score is the NVD's, otherwise CISA-ADP's. CVE-2026-49300 and CVE-2026-50580 are only reserved at CVE.org and absent from the NVD; the project rates both HIGH. For CVE-2026-34877 the ratings diverge: the project says LOW, CISA-ADP 9.8.

CVEWhat, affected, fix
CVE-2022-46393Heap overflow in DTLS with Connection ID (MBEDTLS_SSL_DTLS_CONNECTION_ID), 9.8. Before 2.28.2 and 3.x before 3.3.0.
CVE-2022-35409An invalid ClientHello to a DTLS server reads up to 255 bytes past the heap buffer, 9.1. Before 2.28.1 and 3.x before 3.2.0.
CVE-2025-47917Use-after-free in mbedtls_x509_string_to_names(), 9.8. Before 3.6.4. According to the NVD 2.28.10 is affected, and it gets no fix.
CVE-2026-34875Buffer overflow when exporting FFDH public keys with psa_export_public_key(), 9.8. 3.5.0 to 3.6.5 and TF-PSA-Crypto 1.0.0. Fix 3.6.6, TF-PSA-Crypto 1.1.0.
CVE-2026-34873A man in the middle can impersonate a client when a TLS 1.3 session is resumed, 9.1. Servers with TLS 1.2 and 1.3. 3.5.0 to 3.6.5 and 4.0.0. Fix 3.6.6 and 4.1.0.
CVE-2026-34877Stored TLS sessions or contexts that an attacker can modify cause memory errors when loaded, 9.8. 2.19.0 to 3.6.5 and 4.0.0. Fix 3.6.6 and 4.1.0, none for 2.28.
CVE-2026-49300The X.509 parser reads some invalid certificates as CA certificates (basicConstraints). All versions up to 3.6.6 and 4.0.0 to 4.1.0. Fix 3.6.7, 4.1.1, 4.2.0.
CVE-2026-50580Buffer overflow in the TLS 1.2 client with ECDHE-PSK and a very long PSK identity, triggered by a malicious server. 1.3.10 to 3.6.6 and 4.0.0 to 4.1.0. Fix 3.6.7, 4.1.1, 4.2.0.

Why are new mbedTLS CVEs missing from the NVD?

The release notes of 3.6.7 link 19 security advisories. They name 15 CVE numbers and a sixteenth with a typo (“CVE-ID-50580”, reserved at CVE.org as CVE-2026-50580). On 23 October 2026, 14 of the 15 are only reserved at CVE.org and absent from the NVD. The fifteenth, CVE-2026-25832, is in the NVD without a CPE configuration, status “Awaiting Analysis”. None of the 15 is therefore counted for any version.

If you run 3.6.6, 4.1.0 or older, read the project's security advisories as well. They name the affected versions for each vulnerability.

The 15 numbers from the 3.6.7 release notes at CVE.org
for id in CVE-2026-25832 CVE-2026-35336 CVE-2026-49300 CVE-2026-50579 CVE-2026-50581 CVE-2026-50583 CVE-2026-50584 CVE-2026-50585 CVE-2026-50586 CVE-2026-50587 CVE-2026-50588 CVE-2026-50640 CVE-2026-50713 CVE-2026-54435 CVE-2026-54441; do curl -s "https://cveawg.mitre.org/api/cve-id/$id" | jq -r .state; done | sort | uniq -c

Output

1PUBLISHED14RESERVED

Which mbedTLS lines still get fixes?

According to BRANCHES.md, the LTS branches receive only bug fixes and security fixes; new features go into the development branch for the next 4.x version. The project writes: “Users are urged to always use the latest version of a maintained branch.”

From 4.0 the cryptography lives in a project of its own, TF-PSA-Crypto, with its own version number. Mbed TLS 4.0.0 includes TF-PSA-Crypto 1.0.0. The NVD's CVE configurations list it under trustedfirmware:tf-psa-crypto and under arm:tf-psa-crypto; query both. For TF-PSA-Crypto 1.0.0 the NVD lists five CVEs, two of them 9.0 or higher, for 1.1.0 to 1.2.0 none.

LineAs of 23 October 2026
3.6 LTSFixes until at least March 2027. Current release 3.6.7 of 7 July 2026.
4.1 LTSFixes until at least March 2029. Current release 4.1.1 of 7 July 2026.
4.2Newest version 4.2.0 of 7 July 2026. Not an LTS branch.
4.0No longer in the list of maintained branches.
3.0 to 3.5No longer in the list of maintained branches.
2.282.28.10 of 24 March 2025 was the last release. No more fixes.
2.162.16.12 of 17 December 2021 was the last release.

Under which CPE name is mbedTLS in the NVD?

The NVD CPE dictionary lists mbedTLS today as cpe:2.3:a:trustedfirmware:mbed_tls. The older name cpe:2.3:a:arm:mbed_tls is marked deprecated there, except for three entries. Yet that is exactly the name in the configurations of most older CVEs. A third name, cpe:2.3:a:mbed:mbedtls, is deprecated as well and returned no hit for any of the versions checked.

If you query only the current name, you find not a single CVE for 2.16.12 and six instead of eleven for 3.6.5. Query both names and merge the hits.

mbedTLS 2.16.12 with the current CPE name
curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:a:trustedfirmware:mbed_tls:2.16.12&noRejected" | jq .totalResults
Output
0
The same version with the older CPE name
curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:a:arm:mbed_tls:2.16.12&noRejected" | jq .totalResults
Output
23

Where is the mbedTLS version in my firmware?

In the source the version is in include/mbedtls/version.h (2.x) or include/mbedtls/build_info.h (3.x and 4.x): MBEDTLS_VERSION_STRING, MBEDTLS_VERSION_STRING_FULL and MBEDTLS_VERSION_NUMBER. Older versions spell the full form “mbed TLS”, for example “mbed TLS 2.28.0”, newer ones “Mbed TLS”, for example “Mbed TLS 3.6.7”. So search case-insensitively.

The text is in the build only when library/version.c is built in (option MBEDTLS_VERSION_C, on in the default configuration) and the firmware calls mbedtls_version_get_string() or mbedtls_version_get_string_full(). Otherwise the linker removes it: armlink discards unused sections by default, GNU ld with --gc-sections. If it is missing, function names with the prefix mbedtls_ show that the library is linked, and the version comes from the header in the project.

Folder names help only sometimes. The release archive unpacks to mbedtls-3.6.7/. STM32CubeF4 v1.28.3 puts the library under Middlewares/Third_Party/mbedTLS, with no version in the name; the header there says 2.16.2. STM32CubeU5 and H5 call the folder mbed-crypto, although it holds the full Mbed TLS 3.6.6.

Version in the 3.6.7 release archive
tar xjf mbedtls-3.6.7.tar.bz2 && grep -E "define MBEDTLS_VERSION_STRING(_FULL)? " mbedtls-3.6.7/include/mbedtls/build_info.h

Output

#define MBEDTLS_VERSION_STRING         "3.6.7"
#define MBEDTLS_VERSION_STRING_FULL    "Mbed TLS 3.6.7"
Version in the STM32CubeF4 v1.28.3 package
curl -s https://raw.githubusercontent.com/STMicroelectronics/STM32CubeF4/v1.28.3/Middlewares/Third_Party/mbedTLS/include/mbedtls/version.h | grep -E "define MBEDTLS_VERSION_STRING(_FULL)? "

Output

#define MBEDTLS_VERSION_STRING         "2.16.2"
#define MBEDTLS_VERSION_STRING_FULL    "mbed TLS 2.16.2"

How do I check this by hand?

  1. 1

    Read the version: in the project from version.h or build_info.h, in the build with strings -a firmware.elf | grep -i "mbed tls".

  2. 2

    Check that mbedTLS is linked: arm-none-eabi-nm firmware.elf | grep mbedtls_ lists the functions in the image.

  3. 3

    Place the line: 3.6 and 4.1 are maintained, 2.28 and 2.16 no longer. From 4.0, read the TF-PSA-Crypto version separately (TF_PSA_CRYPTO_VERSION_STRING in tf-psa-crypto/include/tf-psa-crypto/build_info.h of the Mbed TLS 4 tree).

  4. 4

    Query the NVD: virtualMatchString with cpe:2.3:a:trustedfirmware:mbed_tls:<version> and with cpe:2.3:a:arm:mbed_tls:<version>, then merge the hits.

  5. 5

    Read the project's notices: security advisories and release notes name vulnerabilities that are still missing from the NVD.

  6. 6

    Check the CISA KEV catalogue for actively exploited vulnerabilities.

What can I do?

  1. 1

    Move to the newest version of a maintained line: 3.6.7, 4.1.1 or 4.2.0. From 2.16 or 2.28 the shortest path leads to 3.6; the API changed on the way, and the project describes the move in docs/3.0-migration-guide.md.

  2. 2

    For a copy from STM32Cube, the NXP SDK, ESP-IDF or Zephyr, check the next package version. ESP-IDF v5.5.6 and NXP SDK 26.09.00 ship 3.6.7, STM32CubeU5 v1.9.0 and Zephyr v4.3.1 still 3.6.6.

  3. 3

    Until the update, the configuration decides. In the default configuration of 3.6.7 these are on: MBEDTLS_SSL_PROTO_DTLS, MBEDTLS_SSL_DTLS_CONNECTION_ID, MBEDTLS_SSL_CONTEXT_SERIALIZATION, MBEDTLS_SSL_RENEGOTIATION, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED, MBEDTLS_DHM_C, MBEDTLS_PKCS7_C. Off are MBEDTLS_SSL_EARLY_DATA and MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED. Switch off what a device does not need, in mbedtls_config.h (3.x) or config.h (2.x).

  4. 4

    CVE-2026-50580 requires a very long PSK identity. CVE-2026-49300, according to the project, affects only applications that accept certificates directly from untrusted users. CVE-2026-34877 affects only applications that store TLS sessions in serialised form and load them again.

Can this run automatically?

Microcontroller builds from Keil MDK, IAR or GNU Arm. It finds the libraries built in, with their versions, for example CMSIS packs, RTX5, FreeRTOS, lwIP, mbedTLS and STM32Cube. Plus hardening (stack canary, MPU, privilege separation) and embedded keys.

Every component with an evidenced version is matched against the vulnerability sources and says where in the build it sits. If the binary evidences no version, the field stays blank.

Questions

Which mbedTLS version should I use?

The newest version of a maintained line, so as of 23 October 2026 3.6.7, 4.1.1 or 4.2.0. For 3.6.7 the NVD lists one CVE, which occurs only with a specific LLVM optimisation; the project names it for all versions.

Which mbedTLS version is in STM32Cube?

STM32CubeF4 v1.28.3, F7 v1.17.4 and H7 v1.13.0 ship 2.16.2, with 39 CVEs in the NVD. STM32CubeU5 v1.9.0 and H5 v1.7.0 ship 3.6.6 in the folder mbed-crypto.

Does mbedTLS 2.28 still get security fixes?

No. According to its release notes, 2.28.10 of 24 March 2025 is the last release of the line and gets no more bug fixes or security fixes. On 23 October 2026 the NVD lists 15 CVEs for 2.28.10. NXP still shipped 2.28.10 in MCUXpresso SDK 25.12.00.

Is mbedTLS 3.6.6 safe because the NVD lists only one CVE?

No. 3.6.7 of 7 July 2026 fixes vulnerabilities from 19 security advisories, among them a buffer overflow in the TLS 1.2 client and a CA forgery in the X.509 parser. 14 of the CVE numbers involved are only reserved on 23 October 2026 and are therefore absent from the NVD.

Is any mbedTLS vulnerability actively exploited?

As of 23 October 2026 no mbedTLS vulnerability is in the CISA catalogue of known exploited vulnerabilities (catalogue version 2026.10.23, 1,756 entries).

Why does my NVD query find nothing for an old version?

Because many older CVEs are configured under the deprecated CPE name arm:mbed_tls. Query that name in addition to trustedfirmware:mbed_tls.

Does TF-PSA-Crypto count as a component of its own in the SBOM?

From mbedTLS 4.0, TF-PSA-Crypto has its own version number and its own CPE entries in the NVD. So it belongs in the bill of materials with its version.

Sources

  1. [1]Mbed TLS: BRANCHES.md, maintained branches
  2. [2]Mbed TLS: release 2.28.10
  3. [3]Mbed TLS: release 3.6.7
  4. [4]Mbed TLS: security advisories
  5. [5]Mbed TLS: advisory on CVE-2026-49300
  6. [6]NIST NVD: CVE API 2.0
  7. [7]NIST NVD: CPE dictionary
  8. [8]CISA: Known Exploited Vulnerabilities Catalog

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.