VYPR
Medium severity5.3NVD Advisory· Published May 20, 2026· Updated May 20, 2026

CVE-2026-44390

CVE-2026-44390

Description

NLnet Labs Unbound up to and including version 1.25.0 has a vulnerability when handling replies with very large RRsets that Unbound needs to perform name compression for. Malicious upstream responses with very large RRsets with records that don't share a suffix above the root can cause Unbound to spend a considerable time applying name compression to downstream replies. This can lead to degraded performance and eventually denial of service in well orchestrated attacks. An adversary can exploit the vulnerability by querying Unbound for the specially crafted contents of a malicious zone with very large RRsets. Before Unbound replies to the query it will try to apply name compression which was an unbounded operation that could lock the CPU until the whole packet was complete. A compression limit was introduced in 1.21.1 for this but it didn't account for the case where records would not share any suffix above the root. That causes Unbound to go in a different code path because of the compression tree lookup failure and eventually not increment the compression counter for those operations. Unbound 1.25.1 contains a patch with a fix that increments the compression counter regardless of the compression tree lookup. This is a complement fix to CVE-2024-8508.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Unbound up to 1.25.0 has a denial-of-service vulnerability via name compression on large RRsets, fixed in 1.25.1.

Vulnerability

NLnet Labs Unbound versions up to and including 1.25.0 contain a vulnerability in name compression handling for replies with very large RRsets. When Unbound receives malicious upstream responses with large RRsets where records do not share a suffix above the root, the name compression algorithm enters an unbounded code path that can consume excessive CPU time. A compression limit was introduced in version 1.21.1 to mitigate CVE-2024-8508, but it did not account for this specific case, causing the compression counter not to be incremented for those operations [1].

Exploitation

An attacker can exploit this vulnerability by querying Unbound for specially crafted contents of a malicious zone with very large RRsets. Before Unbound replies to the query, it attempts to apply name compression, which becomes an unbounded operation that can lock the CPU until the entire packet is complete. The attacker needs to control an upstream authoritative server or be able to inject malicious responses that Unbound will process [1].

Impact

Successful exploitation leads to degraded performance and, in well-orchestrated attacks, denial of service due to CPU exhaustion. The attacker does not gain code execution or data access; the impact is limited to availability [1].

Mitigation

The vulnerability is fixed in Unbound version 1.25.1, released on the same date as the advisory. Users should upgrade to 1.25.1 or apply the provided patch for version 1.25.0. No workarounds are mentioned; upgrading is the recommended mitigation [1].

AI Insight generated on May 21, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected products

2
  • Nlnetlabs/Unboundinferred2 versions
    <=1.25.0+ 1 more
    • (no CPE)range: <=1.25.0
    • (no CPE)range: <=1.25.0

Patches

2
138fb48eac36

Changelog entry.

https://github.com/NLnetLabs/unboundW.C.A. WijngaardsMay 20, 2026Fixed in release-1.25.1via llm-release-walk
1 file changed · +3 0
  • doc/Changelog+3 0 modified
    @@ -22,6 +22,9 @@
     	- Fix CVE-2026-42960, Possible cache poisoning attack while following
     	  delegation. Thanks to TaoFei Guo from Peking University, Yang Luo
     	  and JianJun Chen, Tsinghua University, for the report.
    +	- Fix CVE-2026-44390, Unbounded name compression in certain cases
    +	  causes degradation of service. Thanks to Qifan Zhang, Palo Alto
    +	  Networks, for the report.
     
     23 April 2026: Wouter
     	- Merge #1441: Fix buffer overrun in
    
dae7a3797424

- Fix CVE-2026-44390, Unbounded name compression in certain cases

https://github.com/NLnetLabs/unboundW.C.A. WijngaardsMay 20, 2026Fixed in release-1.25.1via llm-release-walk
1 file changed · +1 1
  • util/data/msgencode.c+1 1 modified
    @@ -352,14 +352,14 @@ compress_any_dname(uint8_t* dname, sldns_buffer* pkt, int labs,
     		(p = compress_tree_lookup(tree, dname, labs, &insertpt))) {
     		if(!write_compressed_dname(pkt, dname, labs, p))
     			return RETVAL_TRUNC;
    -		(*compress_count)++;
     	} else {
     		if(!dname_buffer_write(pkt, dname))
     			return RETVAL_TRUNC;
     	}
     	if(*compress_count < MAX_COMPRESSION_PER_MESSAGE &&
     		!compress_tree_store(dname, labs, pos, region, p, insertpt))
     		return RETVAL_OUTMEM;
    +	(*compress_count)++;
     	return RETVAL_OK;
     }
     
    

Vulnerability mechanics

Root cause

"The compression counter is only incremented when a compression tree lookup succeeds, so when records do not share a suffix above the root the lookup fails and the counter is never incremented, allowing an unbounded number of compression operations."

Attack vector

An attacker hosts a malicious DNS zone containing very large RRsets whose records do not share a common suffix above the root. The attacker then queries Unbound (or induces a recursive query) for a name in that zone. When Unbound prepares the reply, it attempts to apply name compression to each record. Because the records lack a shared suffix, the compression tree lookup fails for every record, and the compression counter [patch_id=792201] is never incremented. This bypasses the limit introduced in 1.21.1, causing Unbound to spend excessive CPU time compressing the entire packet, leading to degraded performance and eventual denial of service under orchestrated attacks.

Affected code

The vulnerability is in `util/data/msgencode.c` in the function `compress_any_dname`. The compression counter `(*compress_count)++` was placed inside the `if` branch that executes only when `compress_tree_lookup` succeeds. When the lookup fails (records share no suffix above the root), the counter is never incremented, bypassing the `MAX_COMPRESSION_PER_MESSAGE` limit.

What the fix does

The patch [patch_id=792201] moves the `(*compress_count)++` increment out of the `if` branch that only executes when `compress_tree_lookup` succeeds, and places it unconditionally after the compression logic. Previously, when the tree lookup failed (because records share no suffix above the root), the counter was never incremented, allowing an unbounded number of compression operations. Now every call to `compress_any_dname` increments the counter regardless of the lookup result, ensuring the `MAX_COMPRESSION_PER_MESSAGE` limit is enforced in all cases.

Preconditions

  • networkAttacker must control or have access to a malicious DNS zone that returns very large RRsets with records sharing no suffix above the root.
  • inputAttacker must cause Unbound to query the malicious zone (e.g., by sending a query for a domain in that zone).
  • configUnbound must be configured to perform recursive resolution (default configuration).

Generated on May 20, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

1

News mentions

0

No linked articles in our index yet.