How many CVEs does the NVD list for my ESP-IDF version?
Counted are CVEs whose NVD configuration lists the version as vulnerable, queried on 23 October 2026 through the NVD API, rejected entries excluded. The NVD lists ESP-IDF under exactly one name, cpe:2.3:a:espressif:esp-idf. The number is a lower bound; the next section explains why.
The CVSS score is the NVD's, otherwise the vendor's. They can differ widely: the NVD scores CVE-2025-66409 (AVRCP) 9.1, Espressif 2.7.
| Version, release date | CVEs according to the NVD, of which CVSS 9.0 or higher |
|---|---|
| 4.4.8, 28 June 2024 (last 4.4) | 2, of which 1 at 9.0 or higher |
| 5.0.9, 22 May 2025 (last 5.0) | 1, CVSS 9.1 |
| 5.1.2, 16 November 2023 | 2, of which 1 at 9.0 or higher |
| 5.1.7, 27 January 2026 (last 5.1) | 0 |
| 5.2.6, 1 October 2025 | 10, of which 1 at 9.0 or higher |
| 5.2.8, 11 September 2026 (last 5.2) | 1 |
| 5.3.5, 24 March 2026 | 4 |
| 5.4.4, 17 April 2026 (newest 5.4) | 4 |
| 5.5.4, 27 March 2026 | 5 |
| 5.3.6, 5.5.6, 6.0.3 (each the newest of its line) | 0 |
| 6.1, 27 August 2026 | 0. Espressif lists CVE-2026-81508 for 6.1, but the fix 85d56bcd is already in the v6.1 tag; the NVD has the entry without a configuration. |
curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:a:espressif:esp-idf:5.2.6&noRejected" \
| jq .totalResults10curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:a:espressif:esp-idf:5.1.2&noRejected" \
| jq .totalResults2Why is the NVD count for ESP-IDF too low?
The security advisories in the ESP-IDF GitHub repository name, per line, the last affected and the first fixed version, for example “vuln=v5.1.6 patched=v5.1.7”. The NVD configured many of these CVEs as exactly those single versions. CVE-2025-68473, for example, applies in the NVD only to 5.1.6, 5.2.6, 5.3.4, 5.4.3 and 5.5.1; earlier versions of the same lines are not counted. Whether they are affected, the NVD does not say; the advisory names only the last affected version per line.
On top of that come CVEs without an NVD configuration (status “Deferred” or “Awaiting Analysis”). Some descriptions spell the product “ESF-IDF”; a keyword search for “ESP-IDF” does not find them.
For an ESP-IDF version this means: the NVD count is a lower bound. Read the project's advisories and check every CVE against your line, not only against the exact version.
Which ESP-IDF CVEs count first, and with which switch?
Nine CVEs from the NVD lists for 5.2.6 and 5.5.4, by CVSS according to the NVD. Most depend on a feature that Kconfig puts in the build or leaves out. The fixes are stated in the CVE description or in Espressif's advisory.
| CVE, CVSS | What, build switch, fixed in |
|---|---|
| CVE-2025-66409, 9.1 (Espressif 2.7) | Bluedroid AVRCP: out-of-bounds read on a malformed VENDOR DEPENDENT command. Only with Classic Bluetooth and A2DP (CONFIG_BT_A2DP_ENABLE, pulls in AVRCP, off by default). Fixed in 5.5.2, 5.4.4, 5.3.5, 5.2.7, 5.1.7. |
| CVE-2025-55297, 8.8 | BluFi example: overflows in Wi-Fi credential handling and in the Diffie-Hellman exchange. Affects firmware that took over the example's code. Fixed in 5.4.1, 5.3.3, 5.2.6, 5.1.6, 5.0.9. The NVD still counts 5.2.6 to 5.2.8. |
| CVE-2026-45328, 8.8 (Espressif 9.3) | ESP-TEE: several wrappers check only part of the pointers from the application, out-of-bounds write. Only with CONFIG_SECURE_ENABLE_TEE. Fixed in 5.5.5 and, according to the advisory, 6.0.2. |
| CVE-2025-68473, 8.6 | Bluedroid, bta_dm_sdp_result(): more than 32 discovered services write past a fixed array. Fixed like CVE-2025-66409. |
| CVE-2026-25532, 8.0 | WPS enrollee: integer underflow on truncated EAP-WSC packets. Only if the firmware uses WPS. Fixed in 5.5.3, 5.4.4, 5.3.5, 5.2.7, 5.1.7. |
| CVE-2025-68474, 7.6 | Bluedroid AVRCP, avrc_vendor_msg(): buffer too small. Fixed like CVE-2025-66409. |
| CVE-2026-45541, 7.5 | esp_http_server: NULL pointer when negotiating the WebSocket subprotocol, crash before any authentication. Only with CONFIG_HTTPD_WS_SUPPORT (off by default). Fixed in 6.0.1, 5.5.5, 5.3.6 and 5.2.7; 5.4.5 is not out yet. |
| CVE-2026-45542, 7.1 | protocomm Security 2 (SRP6a): heap overflow during session setup, for example during provisioning. CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2 is on by default. Fixed like CVE-2026-45541. |
| CVE-2026-45160, 6.5 | lwIP DHCP server: out-of-bounds read on crafted options, for example in SoftAP mode. CONFIG_LWIP_DHCPS is on by default. Fixed in 6.0.2, 5.5.5, 5.3.6 and 5.2.8; 5.4.5 is not out yet. |
Which CVEs do the libraries inside ESP-IDF bring?
ESP-IDF ships mbedTLS, lwIP, FreeRTOS and NimBLE as components of its own, partly as Espressif forks. The NVD lists their CVEs under each library. Read from the source tree of each tag: mbedTLS from include/mbedtls/build_info.h, lwIP from src/include/lwip/init.h, FreeRTOS from tskKERNEL_VERSION_NUMBER in task.h, NimBLE from sbom.yml in Espressif's fork. In brackets the CVEs according to the NVD for that version of the library.
| ESP-IDF, release date | mbedTLS · lwIP · FreeRTOS · NimBLE |
|---|---|
| 5.1.2, 16 November 2023 | 3.5.0 (32) · 2.1.3 (0) · 10.4.3 (6) · 1.5.0 (15) |
| 5.2.8, 11 September 2026 | 3.6.7 (1) · 2.1.3 (0) · 10.5.1 (5) · 1.5.0 (15) |
| 5.3.6, 15 September 2026 | 3.6.7 (1) · 2.1.3 (0) · 10.5.1 (5) · 1.6.0 (15) |
| 5.4.4, 17 April 2026 | 3.6.5 (11, of which 4 at 9.0 or higher) · 2.2.0 (0) · 10.5.1 (5) · 1.6.0 (15) |
| 5.5.6, 16 October 2026 | 3.6.7 (1) · 2.2.0 (0) · 10.5.1 (5) · 1.6.0 (15) |
| 6.0.3, 2 September 2026 | 4.1.1 (0) · 2.2.0 (0) · 10.5.1 (5) · 1.6.0 (15) |
| 6.1, 27 August 2026 | 4.1.0 (0) · 2.2.0 (0) · 10.5.1 (5) · 1.6.0 (15) |
curl -s https:/ / raw.githubusercontent.com/ espressif/ mbedtls/$(gh api \
"repos/espressif/esp-idf/contents/components/mbedtls/mbedtls?ref=v5.4.4" \
-q .sha)/include/mbedtls/build_info.h \
| grep "define MBEDTLS_VERSION_STRING "Output
#define MBEDTLS_VERSION_STRING "3.6.5"What do the library numbers mean?
mbedTLS is the largest item. ESP-IDF 5.4.4, the newest release of the 5.4 line, ships mbedTLS 3.6.5. The NVD lists eleven CVEs for it, ten of them fixed in mbedTLS 3.6.6. Espressif's fork in 5.4.4 ends with commits from November 2025; the eleven CVEs are from April 2026. The other maintained lines ship mbedTLS 3.6.7 or 4.1.
The five FreeRTOS CVEs for 10.5.1 concern, according to their descriptions, ports with MPU or TrustZone. lwIP has no NVD entry for 2.1.3 and 2.2.0; the flaw in ESP-IDF's DHCP server (CVE-2026-45160) is listed under ESP-IDF. For NimBLE 1.5.0 and 1.6.0 the NVD lists 15 CVEs each under apache:nimble.
Which ESP-IDF lines does Espressif maintain?
According to SUPPORT_POLICY.md every major and minor release is supported for 30 months: 12 months of service, then 18 months of maintenance with “only bugfixes for high severity issues or security issues”. End-of-life lines receive no further fixes.
| Line | As of 23 October 2026 |
|---|---|
| 6.1 | Service. Current 6.1 of 27 August 2026. |
| 6.0 | Service until 20 March 2027. Current 6.0.3 of 2 September 2026. |
| 5.5 | Maintenance until 21 January 2028. Current 5.5.6 of 16 October 2026. |
| 5.4 | Maintenance until 5 July 2027. Current 5.4.4 of 17 April 2026; six advisories name a fix in a 5.4.5 that does not exist yet. |
| 5.3 | Maintenance until 25 January 2027. Current 5.3.6 of 15 September 2026. |
| 5.2, 5.1, 5.0, 4.4 | End of life (5.2 since 11 September 2026, 4.4 since 31 July 2024). |
Where is the ESP-IDF version in the image?
Every ESP-IDF application carries a descriptor esp_app_desc_t (magic 0xABCD5432) at the start of its first data segment, at offset 0x20 of the app image. The field idf_ver with the ESP-IDF version sits 112 bytes further, at offset 0x90. The build sets it from version.txt or git describe.
A public release of a widely used open-source project, WLED 16.0.1 of 7 July 2026 for the ESP32, names ESP-IDF 4.4.8 there. The 4.4 line has been end of life since 31 July 2024.
python -m esptool image-info WLED_16.0.1_ESP32.bin | grep ESP-IDFOutput
ESP-IDF: 4.4.8.240628xxd -s 0x90 -l 16 WLED_16.0.1_ESP32.binOutput
00000090: 342e 342e 382e 3234 3036 3238 0000 0000 4.4.8.240628....How do I check this by hand?
- 1
Read the version:
esptool image-infoon the app image, or the 32 bytes at offset 0x90. In the source treeESP_IDF_VERSION_MAJOR,_MINORand_PATCHare inesp_idf_version.h. - 2
Map the line: 5.3, 5.4, 5.5, 6.0 and 6.1 are maintained.
- 3
Query the NVD with
cpe:2.3:a:espressif:esp-idf:<version>and read the advisories in the GitHub repository against the line, not only against the exact version. - 4
Check the bundled libraries one by one: mbedTLS, lwIP, FreeRTOS, NimBLE or Bluedroid, wpa_supplicant. Their versions are in the component headers.
- 5
Check the switches in
sdkconfig:CONFIG_BT_A2DP_ENABLE,CONFIG_HTTPD_WS_SUPPORT,CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2,CONFIG_LWIP_DHCPS,CONFIG_SECURE_ENABLE_TEE. Switch off what you do not need; the code is then missing from the image. - 6
Read Espressif's hardware advisories (secure boot, flash encryption); they often carry no CVE number and appear in no NVD query.
- 7
Check the CISA KEV catalogue for actively exploited vulnerabilities.
Can this run automatically?
LegacyMind reads the ESP-IDF version and the built-in libraries with their versions from the ESP32 image and matches each against the vulnerability sources, with the place in the image where it was read. Where the image proves no version, the field stays empty.
Questions
Which ESP-IDF version should I use?
The newest version of a maintained line, as of 23 October 2026 that is 5.3.6, 5.4.4, 5.5.6, 6.0.3 or 6.1. For 5.4.4, six advisories name a fix in 5.4.5, which has not been released yet.
Is ESP-IDF 4.4 still safe to use?
The 4.4 line has been end of life since 31 July 2024 and receives no fixes. The NVD lists two CVEs for 4.4.8; because the NVD configures many ESP-IDF CVEs only for the last affected version per line, that is a lower bound.
Which mbedTLS version is in ESP-IDF?
As of 23 October 2026: mbedTLS 3.6.7 in 5.2.8, 5.3.6 and 5.5.6, mbedTLS 3.6.5 in 5.4.4, mbedTLS 4.1.1 in 6.0.3 and 4.1.0 in 6.1. For 3.6.5 the NVD lists eleven CVEs, four of them at 9.0 or higher.
Which FreeRTOS version does ESP-IDF use?
FreeRTOS 10.5.1 in the newest release of every line from 5.2 to 6.1, 10.4.3 in 5.1.2. For 10.5.1 the NVD lists five CVEs; according to their descriptions they concern ports with MPU or TrustZone.
Is an ESP-IDF vulnerability actively exploited?
As of 23 October 2026 no Espressif vulnerability is in the CISA catalogue of known exploited vulnerabilities (catalogue version 2026.10.23).
Why does my NVD query find almost nothing for my version?
Because the NVD configured many ESP-IDF CVEs only for the last affected version of each line. Earlier versions of the same line drop out. Read the project's advisories against your line.