Embedded TCP/IP stack vulnerabilities are packet-parsing and memory-management bugs in the small network stacks RTOS firmware links in, and three disclosures between June 2020 and 2021 (Ripple20, AMNESIA:33 and NAME:WRECK) showed that one crafted TCP, IP or DNS packet can crash or take over such a device. A device maker handles them in three steps: prove which stack and version the image really ships, map that version to the project's own advisories and CERT/CC vulnerability notes, then rebuild, test and ship updated firmware.
Key takeaways
- They showed the same failure three times, in different code bases.
- Start from the build tree, because it is the only place the answer is exact.
- Each stack has its own channel, and none of them push a fix into a shipped device for you.
- Triage is about the configuration you actually built, because embedded stacks are compiled with most features switched off.
What did Ripple20, AMNESIA:33 and NAME:WRECK show?
They showed the same failure three times, in different code bases. CERT/CC's VU#257161 note on Ripple20, released 2020-06-16, says the Treck IP stack "contains multiple vulnerabilities, most of which are caused by memory management bugs", that a remote, unauthenticated attacker "may be able to use specially-crafted network packets to cause a denial of service, disclose information, or execute arbitrary code", and that the historically related KASAGO middleware from Zuken Elmic was also affected by some of them. Its example detection rule targets CVE-2020-11896 and CVE-2020-11900 through fragments inside an IP-in-IP tunnel, which is typical: the bugs sit in rarely used corners of IP, not in application code.
Six months later, CERT/CC's VU#815128 note on AMNESIA:33, released 2020-12-08, listed 33 memory-related vulnerabilities across uIP, Contiki-OS and Contiki-NG, picoTCP, FNET and Nut/OS, and named the inheritance problem directly: projects such as Apache NuttX and open-iscsi "have adopted common libraries and software modules, thus inheriting some of these vulnerabilities". Forescout's AMNESIA:33 research page counts four critical vulnerabilities and more than 150 affected vendors.
In 2021 Forescout and JSOF published NAME:WRECK, nine DNS-related vulnerabilities in four stacks: FreeBSD, Nucleus NET, NetX and IPnet. DNS is the common thread across all three sets, because a device's DNS client parses attacker-influenced responses with hand-written code. That is the same class of bug our dnsmasq vulnerabilities guide covers on embedded Linux, where the parser sits in a separate daemon rather than inside the RTOS image.
A fourth set, INFRA:HALT, followed the same pattern in HCC Embedded's NicheStack. CERT/CC's VU#608209 note says 5 of its 14 vulnerabilities involve TCP and ICMP processing and the rest involve HTTP and DNS, and adds that "a lack of Software Bill of Materials (SBOM) has complicated this outreach and the much-needed identification of impacted devices".
How do you tell which TCP/IP stack a firmware image ships?
Start from the build tree, because it is the only place the answer is exact. A device maker usually has the MCU vendor SDK, the RTOS configuration and the linker map, and those name the stack and its version: lwIP's version macros sit in lwip/init.h, a Zephyr tree has a VERSION file and a west manifest, and a FreeRTOS project pulls FreeRTOS+TCP in as a named library. Write that component and version into the firmware SBOM at build time, because recovering it later from a stripped binary is slow and uncertain.
When only the image is available, look for stack-specific strings and symbols, accepting that each clue is weaker on its own:
| Stack | Typical evidence in a binary or build | Who maintains it |
|---|---|---|
| lwIP | LWIP_VERSION macros in source; pbuf_, tcp_, netconn_ function names and assertion text when asserts or symbols survive |
lwIP project on Savannah |
| FreeRTOS+TCP | Public API names such as FreeRTOS_socket() and FreeRTOS_gethostbyname() |
FreeRTOS project (AWS) |
| Zephyr native networking | "Booting Zephyr OS build" console banner; net_ and dns_ symbols |
Zephyr Project |
| uIP, Contiki-OS, Contiki-NG | uip_ function and buffer names |
Adam Dunkels's uIP repository; Contiki-NG project |
| Nut/Net (Nut/OS) | Nut/OS identifiers in Ethernut-based firmware | Ethernut project |
| Treck, KASAGO, Nucleus NET, NetX, IPnet, NicheStack | Often rebranded or renamed by the licensee; vendor statement is the reliable source | Commercial vendors |
The commercial rows are the hard case. CERT/CC's Ripple20 note says Treck code was licensed "compiled from source, licensed for modification and reuse and finally as a dynamic or static linked library", so the stack name may never appear in the image. Ask the module or SDK supplier for a written statement of which stack and version they ship. Forescout released an open-source detector alongside AMNESIA:33, which CERT/CC mentions in VU#815128, and it is a reasonable first pass on network captures, but a negative result is not proof of absence.
Where does each project publish fixes?
Each stack has its own channel, and none of them push a fix into a shipped device for you.
- lwIP. The lwIP Savannah project describes lwIP as "a small independent implementation of the TCP/IP protocol suite that has been initially developed by Adam Dunkels", aimed at systems "with tens of kilobytes of free RAM and room for around 40 kilobytes of code ROM", under a Modified BSD licence. Its bug tracker, patch tracker, Git repository and release downloads all live there. Many MCU SDKs vendor a copy of lwIP, so check whether your SDK supplier has pulled in an upstream fix before you assume your build has it.
- FreeRTOS+TCP. The repository's GitHub Security Advisories list each fixed issue; recent ones cover the DNS resolver (GHSA-h4fw-pv82-p7h5, published 2026-10-16), IPv6 Router Advertisement parsing, DHCPv6 sub-options and ICMP echo replies. The security policy asks reporters to contact AWS Security and not to open public issues.
- Zephyr. Zephyr's Vulnerabilities page lists every CVE with the pull requests that fixed it on main and on supported branches, and notes that the page "can be updated after the embargo is lifted", unlike version-locked release notes. One 2026 entry, CVE-2026-1678, is a memory-safety bug in the DNS name parser
dns_unpack_name(), where a malicious DNS response can cause an out-of-bounds write whenCONFIG_DNS_RESOLVERis enabled. The Zephyr Security Overview says vulnerabilities are "managed within Github security advisories". - uIP, Contiki, picoTCP, FNET, Nut/OS. CERT/CC's VU#815128 links each upstream project and carries per-vendor statements. Some are final: one vendor statement in that note says patches "won't be provided since the affected product is end-of-life" for a product built on uIP 1.0.
- Treck. CERT/CC's VU#257161 says to update "to the latest stable version of Treck IP stack software (6.0.1.67 or later)" and to contact Treck; downstream users should contact their embedded system vendor.
How should a device maker triage and patch a stack CVE?
Triage is about the configuration you actually built, because embedded stacks are compiled with most features switched off. CERT/CC makes this point in every note above: impact "will vary due to the combination of build and runtime options".
Confirm the component and versionfrom the build tree or supplier statement, and record it in the SBOM. Check the feature gateA DNS resolver CVE does not apply if the resolver is compiled out; an IPv6 Router Advertisement bug does not apply to an IPv4-only build. Record that decision as a not-affected statement, as our CSAF and VEX guide describes. Check reachabilityA parser bug reachable from any packet on the local network is more urgent than one reachable only through a debug shell command. Prioritisewith CISA's KEV catalog and FIRST's EPSS score for each CVE, as our KEV and EPSS prioritisation guide explains. Patch at the sourceUpdate the stack to the fixed release, or backport the upstream fix if the SDK pins an older copy, then rebuild and regression-test the network path. Our memory corruption in embedded firmware guide covers the length-check patterns these fixes usually add. Ship and mitigateDeliver the rebuilt image through a signed update path (see firmware OTA update security). Until devices update, CERT/CC's Ripple20 note lists network mitigations: normalise or reject IP fragments, block IP-in-IP and IPv6-in-IPv4 tunnelling where unused, reject malformed TCP, and "normalize DNS through a secure recursive server".
If the stack is a TLS-capable build, check its crypto library as well; our Mbed TLS and wolfSSL guide covers that half of the network path.
AI-assisted analysis: what the scan does and does not do
SoftWSP's scan works from the firmware's software bill of materials. When the SBOM lists a network stack component and version, the scan matches that version against CVE records, CISA's KEV catalog and FIRST's EPSS scores. That matching is deterministic code: the code scores, and AI narrates.
AI then writes the plain-language summary of which stack CVEs matched, which are KEV-listed or have high EPSS, and what version evidence each match rests on, citing the component, version and record behind every sentence. An engineer reviews every finding before the report is delivered. The steps this guide describes as manual stay with that engineer: identifying a stack compiled into a monolithic RTOS image that has no package record, getting a supplier statement for a rebranded commercial stack, and deciding whether a feature-gated CVE applies. Because matching is version-based, a build with the DNS resolver compiled out is still flagged for a DNS advisory until that review closes it.
For where this fits in a full assessment, see the OWASP Firmware Security Testing Methodology guide, or device & firmware security services to have a specific image reviewed.
This guide draws on CERT/CC vulnerability notes VU#257161, VU#815128 and VU#608209, Forescout's AMNESIA:33 and NAME:WRECK research pages, the lwIP Savannah project page, the FreeRTOS-Plus-TCP security advisories and policy, and Zephyr's Vulnerabilities and Security Overview pages, all read directly on 2026-11-12.
Put this guide to work
Frequently asked questions
Which embedded TCP/IP stacks did Ripple20, AMNESIA:33 and NAME:WRECK affect?
Ripple20 (CERT/CC VU#257161, June 2020) affected the commercial Treck TCP/IP stack and, per CERT/CC, some of the same bugs reached the historically related KASAGO middleware from Zuken Elmic. AMNESIA:33 (CERT/CC VU#815128, December 2020) was 33 memory-related vulnerabilities in open-source stacks: uIP, Contiki-OS and Contiki-NG, picoTCP, FNET and Nut/Net from Nut/OS. NAME:WRECK (Forescout and JSOF, 2021) was nine DNS-related vulnerabilities in four stacks: FreeBSD, Nucleus NET, NetX and IPnet. lwIP, FreeRTOS+TCP and Zephyr's native networking were not part of those three sets, but each publishes its own security fixes, and Zephyr and FreeRTOS+TCP have both fixed DNS and IPv6 parsing bugs since.
How do I find out which TCP/IP stack my RTOS firmware uses?
Start from the build, not the binary: the vendor SDK, the RTOS configuration and the linked library list name the stack and usually its version, for example lwIP's version macros in lwip/init.h. If you only have the image, look for stack-specific strings and symbols: FreeRTOS+TCP's public API is FreeRTOS_socket(), FreeRTOS_gethostbyname() and similar, Zephyr images print a 'Booting Zephyr OS build' banner, and lwIP builds with assertions enabled keep pbuf_ and tcp_ function-prefixed messages. Commercial stacks are licensed and rebranded, so a missing name proves nothing; CERT/CC notes that Treck code was compiled from source, modified or linked as a library, and Forescout released an open-source detector for the stacks in its research for that reason.
Where are fixes for lwIP, FreeRTOS+TCP and Zephyr networking published?
lwIP is developed on the Savannah project page, which hosts its bug tracker, patch tracker, Git repository and downloads. FreeRTOS+TCP publishes GitHub Security Advisories on its repository and asks researchers to report issues to AWS Security rather than in public issues. Zephyr keeps a Vulnerabilities page in its documentation listing each CVE with the pull requests that fixed it, and manages new reports as GitHub security advisories. For Treck, CERT/CC says to update to version 6.0.1.67 or later and to contact Treck; for the AMNESIA:33 stacks, the CERT/CC note links each upstream project.
Does SoftWSP detect the TCP/IP stack inside a monolithic RTOS image automatically?
Not reliably, and it does not claim to. SoftWSP's scan works from the software bill of materials it builds or receives: when a component and version are identified, the scan matches them against CVE records, CISA's KEV catalog and FIRST's EPSS scores, and AI writes a plain-language summary that an engineer reviews. A bare-metal or RTOS image linked into one binary often has no package record for its network stack, so an engineer confirms the stack and version from the build or from strings, and decides whether a feature-gated CVE applies before the report ships.
Sources
- CERT/CC VU#257161: Treck IP stacks contain multiple vulnerabilities (Ripple20)
- CERT/CC VU#815128: Embedded TCP/IP stacks have memory corruption vulnerabilities (AMNESIA:33)
- CERT/CC VU#608209: NicheStack embedded TCP/IP has vulnerabilities (INFRA:HALT)
- Forescout Vedere Labs: AMNESIA:33
- Forescout Vedere Labs: NAME:WRECK
- lwIP: A Lightweight TCP/IP stack, Savannah project summary
- FreeRTOS-Plus-TCP: Security Advisories (GitHub)
- Zephyr Project documentation: Vulnerabilities
- Zephyr Project documentation: Zephyr Security Overview
About this guide
SoftWSP Firmware Security Desk
Covers the Firmware vulnerabilities & fixes cluster: 112 guides.

In this cluster
Questions about this page?
