The dnsmasq CVEs that matter most in router and gateway firmware are the DNSpooq set (CVE-2020-25681 to CVE-2020-25687, fixed in 2.83), the 2017 heap overflow CVE-2017-14491 (fixed in 2.78) and the six CVEs published in May 2026 (fixed in 2.92rel2 and 2.93). Whether each one applies depends on three things: the dnsmasq version, whether DNSSEC, DHCPv6 and TFTP were compiled in, and whether the device's configuration switches them on. Find all three in the image, rank by reachability and exploitation data, then upgrade, disable unused services and restrict exposure.
Key takeaways
- Because on most Linux-based routers, gateways and access points, dnsmasq is the DNS forwarder and the DHCP server at once, and it listens on every LAN client's path.
- Three groups cover most of what a firmware scan will report.
- They show that the same upstream CVE list produces very different results per product, depending on how dnsmasq was built and configured.
- Read the version and compile options from the binary, then read the runtime configuration, and only then compare against the CVE list.
Why does dnsmasq matter so much in embedded firmware?
Because on most Linux-based routers, gateways and access points, dnsmasq is the DNS forwarder and the DHCP server at once, and it listens on every LAN client's path. The CERT/CC vulnerability note on DNSpooq describes it as "widely used open-source software that provides DNS forwarding and caching (and also a DHCP server)" and notes that it is "common in Internet-of-Things (IoT) and other embedded devices." OpenWrt packages it in three build variants, and vendor SDKs derived from OpenWrt inherit it.
That position makes a dnsmasq flaw a network-level problem. A memory corruption bug in its DNS parser can be triggered by a crafted answer from upstream, or by a query from a LAN client. A cache-poisoning weakness lets an attacker redirect every client that uses the device as its resolver. And because dnsmasq's lease-script helper keeps root privileges, as the CVE-2026-4892 patch notes, a flaw in the DHCP or script-helper code can lead straight to root on the device.
Which dnsmasq CVEs matter for routers and gateways?
Three groups cover most of what a firmware scan will report. The version in the right-hand column comes from the dnsmasq CHANGELOG, which names the CVE next to each fix.
| CVE | Code area | Needs | CVSS 3.x base | Fixed upstream in |
|---|---|---|---|---|
| CVE-2017-14491 | DNS reply handling | DNS enabled | 9.8 (NVD) | 2.78 |
| CVE-2017-14493 | DHCPv6 server | DHCPv6 enabled | 9.8 (NVD, v3.0) | 2.78 |
| CVE-2017-14495, -14496 | EDNS0 pseudo-header | --add-mac, --add-cpe-id or --add-subnet |
7.5 (NVD, v3.0) | 2.78 |
| CVE-2020-25681, -25682 | DNSSEC RRset sorting, name extraction | DNSSEC compiled in and enabled | 8.1 (NVD) | 2.83 |
| CVE-2020-25683, -25687 | DNSSEC get_rdata, sort_rrset |
DNSSEC compiled in and enabled | 5.9 (NVD) | 2.83 |
| CVE-2020-25684, -25685, -25686 | Reply matching (cache poisoning) | DNS forwarding | 3.7 (NVD) | 2.83 |
| CVE-2026-2291 | extract_name() heap overflow |
DNS enabled | 7.3 (secondary) | 2.92rel2, 2.93 |
| CVE-2026-5172 | extract_addresses() heap over-read |
DNS enabled | 7.3 / 7.5 (secondary) | 2.92rel2, 2.93 |
| CVE-2026-4890, -4891 | DNSSEC NSEC bitmap loop, RRSIG rdlen |
DNSSEC compiled in and enabled | 7.5; 5.3 / 7.5 (secondary) | 2.92rel2, 2.93 |
| CVE-2026-4892 | DHCPv6 CLID in the script helper | DHCPv6 plus --dhcp-script |
8.4 / 8.8 (secondary) | 2.92rel2, 2.93 |
| CVE-2026-4893 | EDNS client subnet check bypass | --add-subnet |
5.3 (secondary) | 2.92rel2, 2.93 |
"NVD" marks NVD's own Primary score (CVSS 3.1 unless marked v3.0); "secondary" means the scores NVD lists from third parties. For the 2026 CVEs, the NVD record status on 2026-11-11 was "Awaiting Analysis", with no NVD Primary score published.
DNSpooq (2021). Seven CVEs found by JSOF and published on 2021-01-19, according to CERT/CC. Four are heap overflows in the DNSSEC code; the 2.83 changelog says "any dnsmasq with DNSSEC compiled in and enabled is vulnerable to this." The other three weaken how dnsmasq matches replies to queries: it did not tie a reply to the exact address and port of the forwarded query (CVE-2020-25684), it used "the very insecure CRC32" to check replies when built without DNSSEC (CVE-2020-25685), and it forwarded repeated identical queries separately, which multiplies an off-path attacker's chances (CVE-2020-25686). Together these make DNS cache poisoning practical.
The 2017 Google set. Google's security team reported six bugs fixed in 2.78. CVE-2017-14491 is the one with the widest reach: the changelog calls it "a potentially serious security hole" that "allows an attacker who can make DNS requests to dnsmasq, and who controls the contents of a domain" to overflow a heap buffer. Devices still on 2.77 or older carry it.
The 2026 set. On 11 May 2026 the dnsmasq author announced six CVEs for "long-standing bugs which apply to pretty much all non-ancient versions," released 2.92rel2 with the fixes applied, and published per-CVE patches. The same message describes a sharp rise in AI-assisted bug reports to the project, so more dnsmasq fixes are likely to follow. The patch for CVE-2026-4892 explains why that one is serious on routers: a DHCPv6 client ID of up to 65,535 bytes is hex-encoded into a 5,131-byte buffer, and "the helper process retains root privileges."
How do vendor advisories show which CVEs reach a device?
They show that the same upstream CVE list produces very different results per product, depending on how dnsmasq was built and configured. Cisco's DNSpooq advisory states that, at publication, "no Cisco products were found to be affected" by the four DNSSEC memory-corruption CVEs, while multiple products were affected by the cache-poisoning ones. In the CERT/CC note, Cradlepoint's statement rates its NetCloud OS devices "Low/Medium" in the default configuration with DNSSEC disabled, "Medium/High" with DNSSEC enabled, and "Critical" when DNS is exposed on WAN interfaces. Same software, three ratings.
Your own advisory should make the same distinctions. If your build has no DNSSEC, say so and mark the DNSSEC CVEs "not affected" with that justification in a VEX statement. Our CSAF and VEX for device makers guide shows the format.
How do you identify the dnsmasq version and features in a firmware image?
Read the version and compile options from the binary, then read the runtime configuration, and only then compare against the CVE list. A practical sequence:
Unpack the imageExtract the SquashFS, UBIFS, JFFS2 or ext4 root filesystem with binwalk or the vendor's own tooling. If parts will not unpack, our firmware entropy analysis guide covers telling encryption from compression. Find the binaryIt is usually /usr/sbin/dnsmasq. Check for more than one copy; some images ship a second build for a guest network or a recovery partition.Read the version stringdnsmasq embeds dnsmasq-2.xxfor itsversion.bindCHAOS TXT answer, anddnsmasq --versionprints "Dnsmasq version 2.xx". Both are found withstringswithout running anything.Read the compile optionsThe same --versionoutput prints a "Compile time options" line, which also sits in the binary as one string, such asIPv6 GNU-getopt no-DBus no-UBus ... DHCP DHCPv6 ... TFTP ... no-DNSSEC. Ano-prefix means the feature was not built in. In the upstream default build configuration, DHCP, DHCPv6 and TFTP are on and DNSSEC is off.Check the package variantOn OpenWrt-based firmware, the opkg database shows which variant shipped. The OpenWrt package Makefile builds three: dnsmasq(no DHCPv6),dnsmasq-dhcpv6, anddnsmasq-full, the only one that can be built with DNSSEC.Read the runtime configurationLook at /etc/dnsmasq.conf,/etc/dnsmasq.d/and, on OpenWrt,/etc/config/dhcp, plus the init script that builds the command line. The dnsmasq man page states that--dnssecrequires dnsmasq to be "compiled with HAVE_DNSSEC enabled, and DNSSEC trust anchors provided." So a binary that lists DNSSEC can still have validation switched off. Recorddnssec,enable-tftp,dhcp-range,dhcp-script,add-subnet,add-mac,portand the interface settings.Look for backportsThe version string is the upstream base, not the patch level. Debian's tracker for CVE-2026-2291 marks it fixed in bookworm's 2.90-4~deb12u2and bullseye's2.85-1+deb11u2, while the upstream fix is in 2.93. Likewise, CVE-2020-25681 is fixed in buster's2.80-1+deb10u1. Vendor SDKs do the same, so look for patch files in the GPL source release or the build tree.
The output of these steps is a short record per device: version, patch evidence, compiled-in features and enabled features. Our Yocto and Buildroot SBOM guide shows how to capture the same facts at build time, where they are exact, instead of recovering them from the image.
How should you prioritise dnsmasq CVEs?
Rank by reachability first, then by exploitation data, and use the CVSS base score only to break ties. Exploitation data as of 2026-11-10 (CISA KEV catalog version 2026.11.10, FIRST EPSS scores dated 2026-11-10):
| CVE(s) | In KEV | EPSS (percentile) | Typical priority |
|---|---|---|---|
| CVE-2017-14491 | No | 0.865 (99.7th) | High on any pre-2.78 build with DNS enabled |
| CVE-2017-14493, -14495, -14496 | No | 0.684 to 0.854 (99.3rd and above) | High on pre-2.78 builds that use DHCPv6 or the EDNS --add-* options |
| CVE-2020-25681, -25682, -25683, -25687 | No | 0.751 to 0.893 (99.5th and above) | High if DNSSEC is enabled; not affected if it is not compiled in |
| CVE-2020-25684, -25685, -25686 | No | 0.022 to 0.055 (83rd to 93rd) | Medium on any pre-2.83 forwarder; higher if DNS is reachable from WAN |
| CVE-2026-4890, -4891 | No | 0.088, 0.064 (95th, 94th) | High if DNSSEC is enabled (remote denial of service) |
| CVE-2026-5172, CVE-2026-2291 | No | 0.027, 0.006 (86th, 50th) | High: in the core DNS parser, so any build with DNS enabled |
| CVE-2026-4892 | No | 0.008 (57th) | High if DHCPv6 and --dhcp-script are both in use (root code execution) |
| CVE-2026-4893 | No | 0.018 (78th) | Low to medium, only with --add-subnet |
Two points stand out. First, EPSS does not know your configuration: the DNSpooq DNSSEC overflows score above 0.75 even though they cannot run in a build without DNSSEC. Second, none of these CVEs was in CISA's KEV catalog in its 2026.11.10 release. A KEV listing would move a CVE to the top regardless of everything else. Our KEV and EPSS prioritisation guide covers how the two signals combine, and CVSS v4 vs v3.1 covers why base scores need environmental context.
Exposure matters as much as the feature list. A dnsmasq that answers DNS on the WAN interface turns local-network bugs into internet-reachable ones, which is exactly the difference between Cradlepoint's "Medium/High" and "Critical" ratings above.
How do you fix dnsmasq vulnerabilities in firmware?
Upgrade or patch, switch off what the product does not use, restrict where dnsmasq listens, then rebuild and re-scan to prove the result.
Upgrade or patch. dnsmasq 2.93, released on 2026-06-04 according to the project's download directory, contains the fixes for all the CVEs above. If a jump from an old base is too large for this release cycle, 2.92rel2 is 2.92 with the six 2026 fixes, and the CVE patch directory holds one diff per CVE. Its note explains that CVE-2026-4890 covers two problems, so there is one patch for 2.92 and another for 2.91 and earlier. A device on a base older than 2.83 also needs the DNSpooq and 2017 fixes, and at that point moving to 2.93 is usually less work than a long backport stack.
Disable unused services. Each of these removes whole CVE groups from reach:
| If the product does not need | Do this | Removes |
|---|---|---|
| DNSSEC validation in dnsmasq | Ship a build without DNSSEC, or leave --dnssec off |
DNSSEC CVEs (DNSpooq overflows, CVE-2026-4890, -4891) |
| DNS from dnsmasq at all | port=0, which the man page says "completely disables DNS function" |
All DNS-path CVEs |
| TFTP | Leave --enable-tftp unset, or build with NO_TFTP |
TFTP attack surface |
| DHCPv6 | Use the variant or build without DHCPv6 | CVE-2017-14493, CVE-2026-4892 |
| A lease script | Leave --dhcp-script unset |
CVE-2026-4892 |
| EDNS client data | Leave --add-subnet, --add-mac, --add-cpe-id unset |
CVE-2017-14495, -14496, CVE-2026-4893 |
Dropping DNSSEC validation is a trade-off, since validation also defends against spoofed answers. Where it stays on, the fix is to patch, not to disable it.
Restrict exposure. Bind dnsmasq to LAN interfaces with --interface, and use --local-service, which the man page says accepts "DNS queries only from hosts whose address is on a local subnet." Make sure the firewall does not open UDP and TCP port 53 on WAN. CERT/CC also recommends stateful filtering that drops unsolicited DNS responses, and disabling caching on embedded devices when an upstream caching resolver is available. --no-ident stops the version.bind answer that reveals the version to anyone who asks.
Rebuild, re-scan, release. Regenerate the firmware SBOM, compare it with the previous release, and confirm that the new version or patch level is what actually shipped. Our firmware diffing and patch analysis guide covers the binary-level comparison. Then publish the fix with affected versions, fixed version and the CVE list. If the same device also ships BusyBox, Dropbear or U-Boot, the same method applies; see our guides on BusyBox vulnerabilities, Dropbear SSH vulnerabilities and U-Boot bootloader security.
AI-assisted analysis: what SoftWSP actually runs
SoftWSP's automated scan unpacks a firmware image, catalogs the software components in the extracted file system, and identifies dnsmasq by name and version. On OpenWrt-style images this includes the opkg package record, with the package revision stripped so the upstream version can be matched. It then matches that version against CVE records, CISA's KEV catalog and FIRST's EPSS scores. This is deterministic code: the code scores, and AI narrates.
AI's part is the written explanation on top of that matching. It summarises which dnsmasq CVEs matched, which are KEV-listed or have a high EPSS score, and what the version evidence was, and every sentence cites the component, version and record it relies on. An engineer reviews every finding before the report is delivered. The judgements this guide describes as manual stay with that engineer: whether DNSSEC, DHCPv6 and TFTP are compiled in and switched on, whether DNS is reachable from WAN, and whether a vendor backport already closes a version-matched CVE. Version matching flags a patched Debian-style 2.90-4~deb12u2 build as affected; the review step is where backport and configuration evidence become a documented "not affected" decision.
For where dnsmasq review 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 the dnsmasq CHANGELOG, CVE patch directory, man page and dnsmasq-discuss announcement, CERT/CC VU#434904, Cisco's DNSpooq advisory, Debian DSA-6264-1 and the Debian Security Tracker, OpenWrt's dnsmasq package Makefile, NVD, CISA's KEV catalog (version 2026.11.10) and FIRST EPSS data dated 2026-11-10, all read directly on 2026-11-11.
Put this guide to work
Frequently asked questions
Which dnsmasq CVEs matter most for routers and gateways?
Three groups. The DNSpooq set from January 2021 (CVE-2020-25681 to CVE-2020-25687) combines four DNSSEC heap overflows with three cache-poisoning weaknesses and was fixed in dnsmasq 2.83. The 2017 Google set, led by the DNS heap overflow CVE-2017-14491 (NVD CVSS 3.1 base 9.8), was fixed in 2.78. In May 2026 a further six CVEs were published, CVE-2026-2291, CVE-2026-4890 to CVE-2026-4893 and CVE-2026-5172, fixed in 2.92rel2 and 2.93. Which of them apply to a given device depends on the dnsmasq version, the compile-time options and the runtime configuration.
How do I find the dnsmasq version and enabled features in a firmware image?
Extract the root filesystem and locate the dnsmasq binary, usually /usr/sbin/dnsmasq. Its strings contain the version as "dnsmasq-2.xx" and a compile-options line such as "IPv6 GNU-getopt no-DBus ... DHCP DHCPv6 ... TFTP ... DNSSEC", where a "no-" prefix marks a feature that was not built in. On OpenWrt-based images the opkg database also shows which package variant shipped; only dnsmasq-full can be built with DNSSEC. Then read /etc/dnsmasq.conf or the UCI configuration to see whether dnssec, enable-tftp, dhcp-range, dhcp-script and add-subnet are actually switched on.
Does the DNSpooq set affect my device if DNSSEC is disabled?
Partly. CVE-2020-25681, -25682, -25683 and -25687 sit in the DNSSEC validation code, and dnsmasq's 2.83 changelog says any dnsmasq with DNSSEC compiled in and enabled is vulnerable to them. A build without DNSSEC, or one where it is compiled in but not enabled, does not run that code. The three cache-poisoning CVEs, CVE-2020-25684, -25685 and -25686, affect DNS forwarding in general. A build without DNSSEC is in fact the case where CVE-2020-25685 applies, because it then matched replies to queries with CRC32.
Should I upgrade dnsmasq to 2.93 or patch the version I ship?
Either closes the 2026 CVEs. The dnsmasq author published a 2.92rel2 release, which is 2.92 with the six fixes applied, and per-CVE patches for older versions on thekelleys.org.uk/dnsmasq/CVE/; the 2.93 changelog says upgrading to 2.93 or applying the patch is sufficient for CVE-2026-2291. Distributions backport: Debian fixed all six in bookworm's 2.90-4~deb12u2 and trixie's 2.91-1+deb13u1. A device on a pre-2.83 base also needs the DNSpooq and earlier fixes, so moving to 2.93 is usually less work than carrying a long patch stack.
Does SoftWSP check dnsmasq in my firmware?
SoftWSP's automated scan identifies dnsmasq as a component, with its version, from the unpacked firmware file system, and matches that version against CVE records, CISA's KEV catalog and FIRST EPSS scores. AI then writes a plain-language summary that cites the component, version and record behind every finding, and an engineer reviews it. Checking which compile-time options and runtime settings are active, and whether a vendor backport already closes a matched CVE, is part of that engineer review rather than an automatic verdict.
Sources
- dnsmasq CHANGELOG (versions 2.78, 2.83, 2.85, 2.87, 2.90 and 2.93)
- dnsmasq: CVE patches for CVE-2026-2291, CVE-2026-4890 to CVE-2026-4893 and CVE-2026-5172
- Simon Kelley, dnsmasq-discuss: "Security - IMPORTANT" (11 May 2026)
- dnsmasq man page (--dnssec, --port, --enable-tftp, --local-service, --no-ident)
- CERT/CC Vulnerability Note VU#434904: Dnsmasq is vulnerable to memory corruption and cache poisoning (DNSpooq)
- Cisco Security Advisory cisco-sa-dnsmasq-dns-2021-c5mrdf3g: DNSpooq vulnerabilities in dnsmasq
- Debian Security Advisory DSA-6264-1: dnsmasq security update (11 May 2026)
- Debian Security Tracker: CVE-2020-25681 (dnsmasq)
- Debian Security Tracker: CVE-2026-2291 (dnsmasq)
- OpenWrt: dnsmasq package Makefile (dnsmasq, dnsmasq-dhcpv6 and dnsmasq-full variants)
- NIST NVD: CVE-2017-14491
- CISA: Known Exploited Vulnerabilities (KEV) Catalog
About this guide
SoftWSP Firmware Security Desk
Covers the Firmware vulnerabilities & fixes cluster: 106 guides.

In this cluster
Questions about this page?
