Knowledge · ESP32

ESP-IDF vulnerabilities by version: what the NVD counts and what it misses

The NVD count for ESP-IDF is a lower bound; the version sits in the app image at offset 0x90.

These numbers are a lower bound: Espressif's advisories name only the last affected version of each line, and the NVD took many CVEs over exactly that way, as single versions instead of ranges. The NVD counts CVE-2025-68473, for example, only for 5.1.6, 5.2.6, 5.3.4, 5.4.3 and 5.5.1, not for earlier versions of the same lines.

Data queried 23 October 2026 · Page updated 30 October 2026 · 9 min readYou make the conformity statement. This page and our reports provide technical findings as its basis.

At a glance
NVD CVEs for 5.2.6
10, of which 1 at 9.0 or higher
mbedTLS in 5.4.4
3.6.5 (11, of which 4 at 9.0 or higher)
Maintained lines
6.0 and 6.1, and 5.3, 5.4 and 5.5
End of life
4.4 to 5.2
CISA KEV entries
none

NVD, queried 23 October 2026

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 dateCVEs 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 20232, of which 1 at 9.0 or higher
5.1.7, 27 January 2026 (last 5.1)0
5.2.6, 1 October 202510, of which 1 at 9.0 or higher
5.2.8, 11 September 2026 (last 5.2)1
5.3.5, 24 March 20264
5.4.4, 17 April 2026 (newest 5.4)4
5.5.4, 27 March 20265
5.3.6, 5.5.6, 6.0.3 (each the newest of its line)0
6.1, 27 August 20260. 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.
ESP-IDF 5.2.6 in the NVD
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 .totalResults
Output
10
ESP-IDF 5.1.2 in the NVD
curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:a:espressif:esp-idf:5.1.2&noRejected" | jq .totalResults
Output
2

Why 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, CVSSWhat, 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.8BluFi 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.6Bluedroid, bta_dm_sdp_result(): more than 32 discovered services write past a fixed array. Fixed like CVE-2025-66409.
CVE-2026-25532, 8.0WPS 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.6Bluedroid AVRCP, avrc_vendor_msg(): buffer too small. Fixed like CVE-2025-66409.
CVE-2026-45541, 7.5esp_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.1protocomm 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.5lwIP 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 datembedTLS · lwIP · FreeRTOS · NimBLE
5.1.2, 16 November 20233.5.0 (32) · 2.1.3 (0) · 10.4.3 (6) · 1.5.0 (15)
5.2.8, 11 September 20263.6.7 (1) · 2.1.3 (0) · 10.5.1 (5) · 1.5.0 (15)
5.3.6, 15 September 20263.6.7 (1) · 2.1.3 (0) · 10.5.1 (5) · 1.6.0 (15)
5.4.4, 17 April 20263.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 20263.6.7 (1) · 2.2.0 (0) · 10.5.1 (5) · 1.6.0 (15)
6.0.3, 2 September 20264.1.1 (0) · 2.2.0 (0) · 10.5.1 (5) · 1.6.0 (15)
6.1, 27 August 20264.1.0 (0) · 2.2.0 (0) · 10.5.1 (5) · 1.6.0 (15)
The mbedTLS version in ESP-IDF 5.4.4
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.

LineAs of 23 October 2026
6.1Service. Current 6.1 of 27 August 2026.
6.0Service until 20 March 2027. Current 6.0.3 of 2 September 2026.
5.5Maintenance until 21 January 2028. Current 5.5.6 of 16 October 2026.
5.4Maintenance 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.3Maintenance until 25 January 2027. Current 5.3.6 of 15 September 2026.
5.2, 5.1, 5.0, 4.4End 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.

The ESP-IDF version in the app image
python -m esptool image-info WLED_16.0.1_ESP32.bin | grep ESP-IDF

Output

ESP-IDF: 4.4.8.240628
The same field read directly
xxd -s 0x90 -l 16 WLED_16.0.1_ESP32.bin

Output

00000090: 342e 342e 382e 3234 3036 3238 0000 0000  4.4.8.240628....

How do I check this by hand?

  1. 1

    Read the version: esptool image-info on the app image, or the 32 bytes at offset 0x90. In the source tree ESP_IDF_VERSION_MAJOR, _MINOR and _PATCH are in esp_idf_version.h.

  2. 2

    Map the line: 5.3, 5.4, 5.5, 6.0 and 6.1 are maintained.

  3. 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. 4

    Check the bundled libraries one by one: mbedTLS, lwIP, FreeRTOS, NimBLE or Bluedroid, wpa_supplicant. Their versions are in the component headers.

  5. 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. 6

    Read Espressif's hardware advisories (secure boot, flash encryption); they often carry no CVE number and appear in no NVD query.

  7. 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.

Sources

  1. [1]ESP-IDF: Security advisories (GitHub)
  2. [2]ESP-IDF: SUPPORT_POLICY.md
  3. [3]ESP-IDF: Support periods
  4. [4]ESP-IDF: App image format
  5. [5]Espressif: Advisories
  6. [6]NIST NVD: CVE API 2.0
  7. [7]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.