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 date | CVEs 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 2021 | 25 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 2021 | 25 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 2024 | 26 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 2025 | 7 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, release | mbedTLS version according to the header |
|---|---|
| STM32CubeF4 v1.28.3, F7 v1.17.4, H7 v1.13.0 | 2.16.2 |
| STM32CubeU5 v1.9.0, H5 v1.7.0 | 3.6.6 (folder Middlewares/Third_Party/mbed-crypto) |
| NXP MCUXpresso SDK 26.09.00 | 4.2.0 with TF-PSA-Crypto 1.2.0, plus 3.6.7 as a second copy |
| NXP MCUXpresso SDK 26.06.00-LTS | 4.1.0, plus 3.6.6 |
| NXP MCUXpresso SDK 25.12.00 | 2.28.10, plus 3.6.3 |
| ESP-IDF v6.1 | 4.1.0 |
| ESP-IDF v6.0.3 | 4.1.1 |
| ESP-IDF v5.5.6, v5.3.6, v5.2.8 | 3.6.7 |
| ESP-IDF v5.4.4 | 3.6.5 |
| Zephyr v4.4.2 | 4.1.0 |
| Zephyr v4.3.1 | 3.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.
| CVE | What, affected, fix |
|---|---|
| CVE-2022-46393 | Heap 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-35409 | An 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-47917 | Use-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-34875 | Buffer 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-34873 | A 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-34877 | Stored 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-49300 | The 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-50580 | Buffer 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.
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 -cOutput
1PUBLISHED14RESERVEDWhich 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.
| Line | As of 23 October 2026 |
|---|---|
| 3.6 LTS | Fixes until at least March 2027. Current release 3.6.7 of 7 July 2026. |
| 4.1 LTS | Fixes until at least March 2029. Current release 4.1.1 of 7 July 2026. |
| 4.2 | Newest version 4.2.0 of 7 July 2026. Not an LTS branch. |
| 4.0 | No longer in the list of maintained branches. |
| 3.0 to 3.5 | No longer in the list of maintained branches. |
| 2.28 | 2.28.10 of 24 March 2025 was the last release. No more fixes. |
| 2.16 | 2.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.
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 .totalResults0curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:a:arm:mbed_tls:2.16.12&noRejected" \
| jq .totalResults23Where 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.
tar xjf mbedtls-3.6.7.tar.bz2 \
&& grep -E "define MBEDTLS_VERSION_STRING(_FULL)? " \
mbedtls-3.6.7/ include/ mbedtls/ build_info.hOutput
#define MBEDTLS_VERSION_STRING "3.6.7"
#define MBEDTLS_VERSION_STRING_FULL "Mbed TLS 3.6.7"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
Read the version: in the project from
version.horbuild_info.h, in the build withstrings -a firmware.elf | grep -i "mbed tls". - 2
Check that mbedTLS is linked:
arm-none-eabi-nm firmware.elf | grep mbedtls_lists the functions in the image. - 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_STRINGintf-psa-crypto/include/tf-psa-crypto/build_info.hof the Mbed TLS 4 tree). - 4
Query the NVD:
virtualMatchStringwithcpe:2.3:a:trustedfirmware:mbed_tls:<version>and withcpe:2.3:a:arm:mbed_tls:<version>, then merge the hits. - 5
Read the project's notices: security advisories and release notes name vulnerabilities that are still missing from the NVD.
- 6
Check the CISA KEV catalogue for actively exploited vulnerabilities.
What can I do?
- 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
- 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 areMBEDTLS_SSL_EARLY_DATAandMBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED. Switch off what a device does not need, inmbedtls_config.h(3.x) orconfig.h(2.x). - 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.