Which CVEs does my lwIP version have?
The NVD lists lwIP under one CPE name, cpe:2.3:a:lwip_project:lwip. Counted are CVEs whose NVD configuration lists the version as vulnerable, queried on 23 October 2026 without rejected entries. For each version, the table also shows which further CVEs the CNA names as affected in its record at CVE.org.
CVE-2020-22283 (ICMPv6, CVSS 7.5) is configured in the NVD without a version number. It therefore drops out of every version query. Its text names the Git state of the time.
| Version, release date | NVD by CPE, plus per CNA |
|---|---|
| 1.4.1, 17 December 2012 | NVD: CVE-2014-4883, DNS resolver without random IDs and source ports, CVSS 2.0: 4.3. The CNA record of CVE-2026-112062 (mDNS) reaches back to version 0; the 1.4.1 source tree, however, contains no mDNS module. |
| 2.0.3, 16 September 2017 | NVD: none. Per CNA: CVE-2026-112062 (mDNS), CVE-2026-87121 (MQTT), CVE-2026-91018 (API). |
| 2.1.2, 22 November 2018 (STM32CubeF4 v1.28.3, F7 v1.17.4, H7 at tag v1.13.0) | NVD: CVE-2020-22284, buffer overflow in zepif_linkoutput() (6LoWPAN over ZEP), CVSS 7.5. CVE-2020-22283 (ICMPv6, 7.5) is in the NVD without a version; ST names it in advisory SA0037 for lwIP up to 2.1.2, fixed from 2.1.3. Per CNA in addition: CVE-2026-8836 (SNMPv3), CVE-2026-112062, CVE-2026-87121, CVE-2026-91018. |
| 2.1.3, 10 November 2021 (base of the copy in ESP-IDF v5.2.8 and v5.3.6) | NVD: none. Per CNA: CVE-2026-8836, CVE-2026-112062, CVE-2026-87121, CVE-2026-91018. |
| 2.2.0, 25 September 2023 (base of the copy in ESP-IDF v5.4.4 to v6.1) | NVD: none. Per CNA: CVE-2026-8836, CVE-2026-112062, CVE-2026-87121, CVE-2026-91018. |
| 2.2.1, 6 February 2025 (STM32CubeH7 on master) | NVD: none. Per CNA: the four from 2.2.0 and CVE-2026-15340 (SMTP client). |
curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?virtualMatchString=cpe:2.3:a:lwip_project:lwip:2.2.1&noRejected" \
| jq .totalResults0Which lwIP CVEs came in 2026, and where is the fix?
All five are published in the NVD, but without a CPE configuration: CVE-2026-8836 with status “Deferred”, the others with “Awaiting Analysis”. The CVSS scores come from the CNA. Each vulnerability sits in a module that not every build contains. For three of them, CISA published industrial control system advisories in September and October 2026 (ICSA-26-265-01, ICSA-26-265-02, ICSA-26-279-02), with the commit that closes the vulnerability.
| CVE | Module, affected per CNA, CVSS, fix |
|---|---|
| CVE-2026-8836 | SNMPv3, stack overflow in snmp_parse_inbound_frame. 2.1.0 to 2.2.1, 9.8. Commit 0c957ec0 of 13 May 2026. |
| CVE-2026-87121 | MQTT client, write past the end of rx_buffer. 2.0.1 to 2.2.1, 9.8. CISA names commit f89407ea of 31 August 2026; the change to mqtt.c is in the commit before it, 68b2c119 “mqtt: fix rx_buffer overrun”. |
| CVE-2026-15340 | SMTP client: a long AUTH line from the server overruns tx_buf. 2.2.1, 9.8. Commit 614420f8 of 12 May 2026. |
| CVE-2026-91018 | Double free in the lwIP API. 2.0.1 to 2.2.1, 8.8. CISA names commit f873b629 of 31 August 2026, a change to lowpan6.c. |
| CVE-2026-112062 | mDNS, stack write in mdns_handle_response. Up to 2.2.1, 5.9. Commit ab2f69c7 of 27 May 2026. |
How is lwIP maintained?
lwIP is developed on Savannah. The newest release is 2.2.1 of 6 February 2025. The master branch has received 52 commits since then, the last on 27 October 2026, among them all five fixes above, a check of the TCP options and further security fixes from 18 to 27 October (SNMP, 6LoWPAN, MQTT, PPP, TFTP). There is no release with these fixes on 30 October 2026.
On master, init.h carries revision 2 with LWIP_RC_DEVELOPMENT. A build from this state reports itself as 2.2.2 with the suffix “d” for development.
git tag --contains 0c957ec0 | wc -l0git tag --contains 614420f8 | wc -l0grep -E "#define LWIP_VERSION_(REVISION|RC) " src/include/lwip/init.hOutput
#define LWIP_VERSION_REVISION 2
#define LWIP_VERSION_RC LWIP_RC_DEVELOPMENTWhich lwIP version is in STM32Cube, the NXP SDK and ESP-IDF?
Many devices get lwIP through the chip vendor's SDK. These copies carry changes of their own. Whether the 2026 fixes are in them shows in the source: checked at the lines each fix changes, in the files snmp_msg.c, smtp.c, mdns.c, mqtt.c and lowpan6.c, as of 23 October 2026.
For STM32CubeH7 v1.13.0 the release notes and the SBOM name lwIP 2.2.1. The submodule at Git tag v1.13.0, however, points to ST tag v2.1.2_20190315, so lwIP 2.1.2 with CVE-2020-22283 and CVE-2020-22284. Only the master branch points to v2.2.1_20250804, since 27 March 2026.
NXP brought its lwIP to the upstream state 3d896ba0 on 16 June 2026. That state contains the fixes for SNMPv3, SMTP and mDNS. The two fixes of 31 August 2026 are missing, for MQTT and, according to CISA, for CVE-2026-91018. The file mqtt.c in the SDK is identical to the state before the fix.
| Package, release | lwIP version, 2026 fixes |
|---|---|
| STM32CubeF4 v1.28.3, F7 v1.17.4 | 2.1.2. None of the fixes. |
| STM32CubeH7 v1.13.0 | 2.1.2 at the Git tag, 2.2.1 on master and according to the release notes. None of the fixes. |
| NXP MCUXpresso SDK 26.09.00 | 2.2.2 in development (upstream state of 16 June 2026). SNMPv3, SMTP and mDNS fixed. MQTT and CVE-2026-91018 not. |
| ESP-IDF v5.4.4 to v6.1 | 2.2.0 in development (fork esp-lwip). None of the fixes in the code. The ESP-IDF build system compiles only SNTP and NetBIOS from src/apps and does not build lowpan6.c; the files of the five fixes are not in the image. |
| ESP-IDF v5.2.8, v5.3.6 | 2.1.3 in development (fork esp-lwip). As above, only SNTP and NetBIOS from src/apps, without lowpan6.c. |
curl -s https:/ / raw.githubusercontent.com/ nxp-mcuxpresso/ lwip/ a819058895af886fce65250cd82a8cf52a1b980d/ src/ apps/ mqtt/ mqtt.c \
| diff - <(git show 68b2c119:src/apps/mqtt/mqtt.c)Output
862c862,866
< client->rx_buffer[client->msg_idx++] = b;
---
> if (client->msg_idx < MQTT_VAR_HEADER_BUFFER_LEN) {
> client->rx_buffer[client->msg_idx++] = b;
> } else {
> return MQTT_CONNECT_DISCONNECTED;
> }Do the SDK copies have changes and vulnerabilities of their own?
ST lists its changes in st_readme.txt. The entry of 22 April 2016 reads: “Use updated version of LwIP v1.4.1 by integrating latest sources from LwIP Git Repository”, with a commit of 11 February 2016. In the lwIP Git that commit carries version 1.5.0 in development.
The NVD lists some vulnerabilities under the SDK vendor's product. CVE-2026-45160 affects the DHCP server in the lwIP part of ESP-IDF, CVSS 6.5, and is listed under espressif:esp-idf for 5.2.7, 5.3.5, 5.4.4, 5.5.4 and 6.0.1. Espressif's advisory names 5.2.8, 5.3.6, 5.4.5, 5.5.5 and 6.0.2 as fixed; there is no version 5.4.5 on 23 October 2026. CVE-2026-74222 affects U-Boot before 2026.10-rc5, whose wget builds on lwIP; the NVD has not yet assigned it to a product.
A version number is therefore where the check starts. Whether a fix is included is in the SDK's release notes or in the source of the copy.
Where is the lwIP version in my firmware?
In the source the version sits in src/include/lwip/init.h. lwIP assembles LWIP_VERSION_STRING from the three macros. The core of the stack does not write this text into the image. The HTTP modules do: the web server sends it in the header “Server: lwIP/2.2.1 (http://savannah.nongnu.org/projects/lwip)”, the HTTP client as its identifier. If one of them is built, the version is in the image as text. With the default setting LWIP_HTTPD_DYNAMIC_HEADERS 0, the header sits in the file data that makefsdata generated; the version in it is that of the makefsdata run.
Without an HTTP module, symbols and paths remain. Functions such as lwip_init, tcp_input and etharp_output show that lwIP is linked. The default definition of LWIP_PLATFORM_ASSERT prints the name of the source file. If it stays active, the path of the lwIP sources is in the image. The release archive lwip-2.2.1.zip unpacks to lwip-2.2.1/; if that folder name stays in the project, the version is in the path.
grep -E "#define LWIP_VERSION_(MAJOR|MINOR|REVISION|RC) " \
src/include/lwip/init.hOutput
#define LWIP_VERSION_MAJOR 2
#define LWIP_VERSION_MINOR 2
#define LWIP_VERSION_REVISION 1
#define LWIP_VERSION_RC LWIP_RC_RELEASEgrep -n "define HTTPD_SERVER_AGENT" src/include/lwip/apps/httpd_opts.hOutput
172:#define HTTPD_SERVER_AGENT "lwIP/" LWIP_VERSION_STRING " (http://savannah.nongnu.org/projects/lwip)"How do I check this by hand?
- 1
Read the version:
src/include/lwip/init.hin the project. In the build,strings -a firmware.elf | grep "lwIP/"finds the identifier if an HTTP module is built. - 2
Check that lwIP is linked:
arm-none-eabi-nm firmware.elf | grep -E " (lwip_init|tcp_input|etharp_output)$". - 3
Establish the origin: upstream release, Git state (
LWIP_RC_DEVELOPMENT) or a copy from an SDK. For an SDK copy, read the SDK's release notes, for STM32Cube from GitHub the submodule state. - 4
Query the NVD:
virtualMatchString=cpe:2.3:a:lwip_project:lwip:<version>. Add a keyword search for “lwIP”, because new CVEs may still lack a CPE configuration, and read the CNA records at CVE.org. - 5
Check the modules:
LWIP_SNMP,LWIP_SNMP_V3,LWIP_MDNS_RESPONDERandLWIP_IPV6are 0 in the default configuration and are switched on inlwipopts.h. MQTT and SMTP are separate files undersrc/appsthat are built only if the project includes them. In the NXP SDK,CONFIG_MCUX_COMPONENT_middleware.lwip.apps.mqttandCONFIG_MCUX_COMPONENT_middleware.lwip.apps.mdnsadd the modules. - 6
Check the CISA KEV catalogue for actively exploited vulnerabilities.
What can I do?
- 1
A device with SNMPv3, MQTT, SMTP or mDNS from lwIP: take over the five commits from the table above or move to the current master state (27 October 2026); further security fixes landed from 18 to 27 October (SNMP, 6LoWPAN, MQTT, PPP, TFTP). There is no release with all the fixes.
- 2
In NXP SDK 26.09.00: pull in commits 68b2c119 (MQTT, one line in
mqtt.c) and f873b629. - 3
lwIP 2.1.2 from STM32Cube: CVE-2020-22283 and CVE-2020-22284 are fixed from 2.1.3; ST provides the fixed version in the repository stm32-mw-lwip.
- 4
Switch off modules the device does not need in
lwipopts.h, or take the files out of the build. A vulnerability in a module that is not built is not in the image.
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 lwIP version is current?
The newest release is 2.2.1 of 6 February 2025. The master branch carries 2.2.2 in development, with fixes that are in no release.
Is lwIP 2.2.1 free of known vulnerabilities?
No. By CPE the NVD assigns no CVE to 2.2.1, but five CVEs from 2026 name 2.2.1 as affected in their CNA record, for SNMPv3, MQTT, SMTP, mDNS and the API. Whether one of them affects a device depends on whether the module is built.
Which lwIP version is in STM32Cube?
STM32CubeF4 v1.28.3 and F7 v1.17.4 ship 2.1.2. STM32CubeH7 v1.13.0 ships 2.1.2 at the Git tag, 2.2.1 on master. STM32CubeU5 and H5 ship no lwIP, they build on NetX Duo.
Is the lwIP in ESP-IDF affected by the 2026 CVEs?
The affected code sits unfixed in the ESP-IDF copy. The ESP-IDF build system, however, does not compile the affected files. CVE-2026-45160 applies to the ESP-IDF DHCP server.
Is any lwIP vulnerability actively exploited?
As of 23 October 2026 no lwIP vulnerability is in the CISA catalogue of known exploited vulnerabilities (catalogue version 2026.10.23, 1,756 entries).
My lwIP comes from the chip vendor's SDK. Does the table apply?
As a starting point. The SDK copy can contain fixes the version number does not show, or have vulnerabilities of its own that the NVD lists under the SDK. The SDK's release notes and source decide.
Sources
- [1]lwIP on Savannah
- [2]lwIP: Git repository
- [3]NVD: CVE-2020-22284
- [4]NVD: CVE-2026-8836
- [5]CVE.org: CVE-2026-15340
- [6]CISA: ICSA-26-265-01, lwIP MQTT client
- [7]STMicroelectronics: security advisory SA0037 on CVE-2020-22283 and CVE-2020-22284
- [8]NXP: lwIP for MCUXpresso SDK, CHANGELOG.md
- [9]Espressif: GHSA-g764-gwc3-75m5 on CVE-2026-45160
- [10]CISA: Known Exploited Vulnerabilities Catalog