Skip to main content

NLnet Labs Unbound CVE-2026-46582

| EUVDEUVD-2026-47670 LOW
Improperly Implemented Security Check for Standard (CWE-358)
2026-07-22 NLnet Labs GHSA-cj23-2crp-2xvv
3.7
CVSS 3.1 · Vendor: NLnet Labs
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Control DNSSEC-signed domain and configure CNAME wrapper to wildcard sibling
  2. Delivery
    Query victim Unbound resolver to seed wildcard RRSET into cache
  3. Exploit
    Wait for cache record to expire
  4. Install
    Send CNAME wrapper query to trigger serve-expired resolution path
  5. C2
    Inject wildcard RRSET without NSEC into upstream DNS response during refresh
  6. Execute
    Race condition sets RRSET to DNSSEC-secure before NSEC validation
  7. Impact
    Poisoned sibling record returned as DNSSEC-valid to downstream clients

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V12 - Secure Communication Improperly implemented security check
Exploitation Conditions

The serve-expired feature must be enabled in Unbound (configured via 'serve-expired: yes' in unbound.conf - this is not the default in all distributions but is commonly enabled for performance). The victim zone must contain a wildcard record and a sibling record that could be covered by that wildcard. The attacker must control at least one DNSSEC-signed domain (any domain suffices; it does not need to be related to the victim zone) and must be able to inject a crafted wildcard RRSET - without its accompanying NSEC record - into a DNS response that Unbound receives during the serve-expired refresh window. A thread-timing race must be won: the resolving thread must set the rrset to secure from RRSIG validation before the serve-expired thread reads it. What limits exploitation: the serve-expired code path requirement (non-default in many deployments), dependence on a specific wildcard-plus-sibling DNS zone structure in the victim domain, the need to win a thread race, and the attacker's dependency on influencing DNS responses Unbound receives (e.g., via a poisoned upstream or as the authoritative server for the injected records).

Impact

The NVD CVSS 3.1 score of 3.7 (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N) accurately reflects the constrained real-world impact. Attack complexity is genuinely High: exploitation requires the attacker to control any DNSSEC-signed domain, craft a CNAME wrapper pointing to a sibling of a wildcard in the victim zone, seed the Unbound cache through a specific query sequence, wait for expiry, and then win a thread race during serve-expired resolution - all coordinated precisely. The integrity impact is low and scoped to a single cache record rather than broad cache poisoning. No EPSS data was provided in the input; KEV status is absent, meaning CISA has not confirmed active exploitation. No public POC has been identified. The primary concern is for recursive resolver operators who serve DNSSEC-validating clients and have serve-expired enabled, because the poisoned entry carries a spuriously 'secure' DNSSEC status, which could suppress downstream validation errors in stub resolvers that trust the resolver's AD bit. The gap between CVSS network vector (AV:N) and the description's requirement for coordinated multi-step setup is consistent - the network vector refers to the delivery of the DNS queries, not a simple single-packet exploit. This is a genuine but low-priority finding absent signs of active exploitation.

Exploit ScenarioDerived

An attacker who controls any DNSSEC-signed domain (unrelated to the victim) creates a CNAME record pointing to a sibling record of a wildcard in the victim zone, then queries the victim's Unbound resolver for the wildcard sibling to seed the cache with a transiently-secure wildcard RRSET. After the cache entry expires, the attacker queries the CNAME wrapper, causing Unbound to re-resolve via the serve-expired path; if the attacker can inject the wildcard RRSET (without NSEC records) into the upstream response during this window, the threading race causes the sibling record to be overwritten with the wildcard and marked DNSSEC-secure, returning a poisoned answer to downstream clients. No public POC exists at time of analysis, and the multi-step coordination required makes opportunistic exploitation unlikely.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Jul 22, 2026

DNS cache poisoning in Unbound 1.6.0 through 1.25.1 allows a remote, unauthenticated attacker to inject a falsely DNSSEC-secure wildcard record into the resolver cache by exploiting a race condition on the serve-expired code path. The flaw arises because wildcard RRSET entries can be briefly marked secure after RRSIG validation but before NSEC validation completes, and a concurrent serve-expired thread can capture and propagate that intermediate secure status before it is corrected to bogus. No public exploit has been identified at time of analysis and CISA KEV does not list this vulnerability, but the integrity impact on DNSSEC-relying downstream clients makes it notable for operators running serve-expired in recursive resolver deployments.

RemediationAI

Operators should consult the NLnet Labs vendor advisory at https://www.nlnetlabs.nl/downloads/unbound/CVE-2026-46582.txt for the specific patched release; no exact fix version number was provided in the available input data, so 'Patch available per vendor advisory' is the most accurate characterization - verify the release notes for the minimum safe version before upgrading. As a compensating control, disabling the serve-expired feature (removing or commenting out 'serve-expired: yes' in unbound.conf) eliminates the vulnerable code path entirely, since the CVE description explicitly states the vulnerability is specific to the serve-expired path; the trade-off is loss of stale-while-revalidate behavior and potential increase in NXDOMAIN responses during upstream failures. Restricting serve-expired-ttl to zero or a very short window is a partial mitigation that reduces the exploitation window but does not eliminate it. For deployments where serve-expired cannot be disabled, prioritizing the vendor patch and monitoring for anomalous wildcard record cache entries is recommended.

Affected VersionsENISA

Unbound 1.6.0 <1.25.2

Affected Packages

euvd unbound fix: 1.25.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Unbound is a validating, recursive, caching DNS resolver developed by NLnet Labs, widely deployed by ISPs, enterprises, and security appliances. The vulnerability resides in the interaction between Unbound's multi-threaded DNSSEC validation pipeline and its serve-expired feature (RFC 8767), which allows the resolver to return expired cache entries while a background refresh is underway. DNSSEC wildcard record validation requires two steps: (1) verifying the RRSIG covering the synthesized wildcard answer, and (2) verifying the accompanying NSEC/NSEC3 record that proves no closer match exists. CWE-358 (Improperly Implemented Security Check for Standard) captures the root cause: step 1 is allowed to set a 'secure' status on the RRSET in shared cache memory before step 2 is performed, and the serve-expired thread reads and acts on that intermediate, incomplete security label. The affected CPE is cpe:2.3:a:nlnet_labs:unbound:*:*:*:*:*:*:*:* covering 1.6.0 through 1.25.1. The attack is specific to wildcard DNS records and the two-phase DNSSEC validation ordering in Unbound's threading model.

Know when Unbound gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (NLnet Labs) PRIMARY 3.7 LOW
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
vuln.today AI 3.7 LOW

Network delivery via DNS queries (AV:N), genuinely high coordination complexity including thread race and specific zone structure (AC:H), no authentication needed (PR:N), low scoped integrity impact on a single cache record only (I:L, S:U).

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (NLnet Labs).

CVSS VectorVendor: NLnet Labs

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Jul 22, 2026 - 16:18 EUVD

DescriptionCVE.org

In NLnet Labs Unbound 1.6.0 up to and including 1.25.1, a replay of a wildcard rrset as another piece of data, could be briefly considered DNSSEC secure based only on the RRSIG validation and stored into cache, before later validation treats it as bogus based on NSEC validation. When the resolving thread puts secure on the rrset, and another thread that is on the serve expired path then picks up the updated rrset contents with the secure status for a reply, it can be used to change a specific record, next to a wildcard that could be covered by the wildcard, into the wildcard. A malicious actor can exploit the possible poisonous effect by having any DNSSEC-singed domain (irrelevant to the victim domain) and a CNAME wrapper record that points to a record next to a wildcard (that could be covered by the wildcard). Then quering Unbound for the wildcard sibling record would seed the secure message. A later (after expiry) query for the CNAME wrapper would need to resolve the target sibling record. If the wildcard replay is injected into the response, the wildcard rrset will update the expired sibling record with a secure status before completing proper wildcard validation with NSEC records and eventually treating the CNAME wrapper answer as bogus. The updated poisoned rrset is now secure and points to the wildcard. This vulnerability is explicit for the serve expired path and needs injection of the signed wildcard rrset without the NSEC accompanying rrset.

Threat Intelligence Overview

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Medium
widely used recursive resolver in ISP and enterprise Linux deployments
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

18
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +18
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Code Injection CRITICAL

Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.

CVE-2019-18934 HIGH POC
7.3 Nov 19

Unbound 1.6.4 through 1.9.4 contain a vulnerability in the ipsec module that can cause shell code execution after receiv

CVE-2026-81642 CRITICAL
9.1 Sep 16

A crafted DNSKEY whose owner name is a compression pointer into its own RDATA overflows the digest buffer in the DNSSEC

CVE-2026-33278 CRITICAL
9.1 May 20

Use-after-free in the DNSSEC validator of NLnet Labs Unbound resolver versions 1.19.1 through 1.25.0 allows remote attac

CVE-2026-42959 HIGH
8.7 May 20

Remote denial of service in NLnet Labs Unbound recursive DNS resolver (versions up to and including 1.25.0) allows an at

CVE-2026-42944 HIGH
8.7 May 20

Heap overflow denial-of-service in NLnet Labs Unbound recursive DNS resolver versions 1.14.0 through 1.25.0 allows remot

CVE-2026-82717 HIGH
8.4 Sep 16

Heap-based memory corruption in NLnet Labs Unbound up to and including 1.26.0 lets a remote, unauthenticated attacker wh

CVE-2019-16866 HIGH
7.5 Oct 03

Unbound before 1.9.4 accesses uninitialized memory, which allows remote attackers to trigger a crash via a crafted NOTIF

CVE-2026-32665 HIGH
7.5 Jul 22

Remote denial of service in NLnet Labs Unbound 1.22.0 through 1.25.1 lets an unauthenticated client exhaust configured m

CVE-2026-55973 HIGH
7.5 Jul 22

Remote denial-of-service in NLnet Labs Unbound 1.23.0 through 1.25.1 lets an attacker who controls a delegated DNS zone

CVE-2026-40691 HIGH
7.5 Jul 22

Remote denial-of-service in NLnet Labs Unbound 1.9.0 through 1.25.1 allows an unauthenticated attacker to crash the recu

CVE-2026-81634 HIGH
7.5 Sep 16

Heap buffer overflow in NLnet Labs Unbound 1.26.0 and earlier can be triggered when a resolver processing a large TCP-fr

CVE-2026-85501 HIGH
7.5 Sep 16

Denial-of-service through algorithmic complexity attacks in NLnet Labs Unbound up to and including 1.26.0 can degrade or

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy