Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconControl DNSSEC-signed domain and configure CNAME wrapper to wildcard sibling
-
DeliveryQuery victim Unbound resolver to seed wildcard RRSET into cache
-
ExploitWait for cache record to expire
-
InstallSend CNAME wrapper query to trigger serve-expired resolution path
-
C2Inject wildcard RRSET without NSEC into upstream DNS response during refresh
-
ExecuteRace condition sets RRSET to DNSSEC-secure before NSEC validation
-
ImpactPoisoned 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:L/A:N
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).
Primary rating from Vendor (NLnet Labs).
CVSS VectorVendor: NLnet Labs
Lifecycle Timeline
1DescriptionCVE.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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Unbound 1.6.4 through 1.9.4 contain a vulnerability in the ipsec module that can cause shell code execution after receiv
A crafted DNSKEY whose owner name is a compression pointer into its own RDATA overflows the digest buffer in the DNSSEC
Use-after-free in the DNSSEC validator of NLnet Labs Unbound resolver versions 1.19.1 through 1.25.0 allows remote attac
Remote denial of service in NLnet Labs Unbound recursive DNS resolver (versions up to and including 1.25.0) allows an at
Heap overflow denial-of-service in NLnet Labs Unbound recursive DNS resolver versions 1.14.0 through 1.25.0 allows remot
Heap-based memory corruption in NLnet Labs Unbound up to and including 1.26.0 lets a remote, unauthenticated attacker wh
Unbound before 1.9.4 accesses uninitialized memory, which allows remote attackers to trigger a crash via a crafted NOTIF
Remote denial of service in NLnet Labs Unbound 1.22.0 through 1.25.1 lets an unauthenticated client exhaust configured m
Remote denial-of-service in NLnet Labs Unbound 1.23.0 through 1.25.1 lets an attacker who controls a delegated DNS zone
Remote denial-of-service in NLnet Labs Unbound 1.9.0 through 1.25.1 allows an unauthenticated attacker to crash the recu
Heap buffer overflow in NLnet Labs Unbound 1.26.0 and earlier can be triggered when a resolver processing a large TCP-fr
Denial-of-service through algorithmic complexity attacks in NLnet Labs Unbound up to and including 1.26.0 can degrade or
EUVD-2026-47670
GHSA-cj23-2crp-2xvv
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB