Skip to main content

Unbound DNS Resolver CVE-2026-55991

| EUVDEUVD-2026-47683 MEDIUM
Signed to Unsigned Conversion Error (CWE-195)
2026-07-22 NLnet Labs GHSA-j6hj-wvx2-8wqp
5.9
CVSS 3.1 · Vendor: NLnet Labs
View

Attack ChainAIDerived

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

  1. Recon
    Identify DoQ-enabled Unbound instance
  2. Delivery
    Connect via QUIC advertising initial_max_stream_data_bidi_local=1
  3. Exploit
    Send one DoQ DNS query without reading response
  4. Install
    Stream backpressure triggers NGTCP2_ERR_STREAM_DATA_BLOCKED
  5. C2
    Unbound passes int -1 as uint64_t to ngtcp2_ccerr_set_application_error
  6. Execute
    libngtcp2 assertion fails on 2^64-1 varint value
  7. Impact
    Unbound process aborts, all DNS resolution halts

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Signed/unsigned conversion safety
Exploitation Conditions

Three specific conditions must all be true simultaneously for exploitation to succeed. First, DNS-over-QUIC (DoQ) must be explicitly configured as an active listener in Unbound - DoQ is not enabled by default; it requires explicit interface directives in unbound.conf pointing to a QUIC endpoint. Second, the Unbound binary must have been compiled with C assertion macros active, meaning the build did NOT define -DNDEBUG; most distribution-provided packages disable assertions in release builds, so this primarily affects source-compiled or development builds. Third, the attacker must have network-layer reachability to the DoQ UDP port (typically 853) - standard firewall controls that restrict external access to this port are an effective barrier. What limits exploitation beyond CVSS: no authentication, no user interaction, and no special application-layer privilege is required once the two structural prerequisites (DoQ enabled, assertions compiled in) are satisfied. Exploitation against default Unbound installations (no DoQ, standard distribution packages) is not possible.

Impact

The NVD CVSS 3.1 vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H (score 5.9) correctly captures the network-reachable, unauthenticated nature of the attack but rates complexity High, reflecting the two non-default prerequisites: Unbound must be compiled with assertion macros active, and DNS-over-QUIC must be configured. Production builds from major Linux distribution packages (Debian, RHEL, Alpine) typically compile with optimizations that disable assertions (-DNDEBUG), substantially narrowing the real-world attack surface. However, source-built deployments, BSD-based firewall appliances (pfSense, OPNsense), and any operator who explicitly enables DoQ for privacy-preserving resolver services are genuinely exposed. The denial-of-service impact is severe: the entire Unbound process aborts, not just the affected connection, meaning all resolving clients lose service simultaneously. No EPSS score was available in the provided intelligence; the absence of KEV listing and POC code means the probability of observed exploitation is currently low, but the attack is described as entirely deterministic - any actor who reads the advisory can reproduce it without exploit development skill. Impact is purely availability (C:N/I:N/A:H); confidentiality and integrity are unaffected. The gap between CVSS complexity (High) and actual attack complexity (deterministic, single-packet-equivalent trigger once prerequisites are met) suggests defenders should treat this as operationally simpler than AC:H implies, contingent on the compilation and configuration prerequisites being satisfied.

Exploit ScenarioDerived

An attacker with network access to an Unbound DoQ listener (typically UDP port 853) opens a QUIC connection and advertises initial_max_stream_data_bidi_local = 1 in the ClientHello transport parameters, constraining Unbound's stream write buffer to one byte. The attacker then sends a single valid DNS query over the DoQ stream but never reads the response stream, causing Unbound's write attempt to return NGTCP2_ERR_STREAM_DATA_BLOCKED. Unbound's error path invokes ngtcp2_ccerr_set_application_error(-1), the -1 widens to 0xFFFFFFFFFFFFFFFF, the assertion in ngtcp2_put_uvarintlen() fires, and the entire Unbound process aborts - taking down DNS resolution for all clients served by that instance. No POC code has been identified in the provided data, but the attack requires no brute force or timing, making it trivially reproducible from the advisory description alone.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jul 22, 2026

Remote unauthenticated termination of Unbound 1.22.0 through 1.25.1 is possible via a crafted DNS-over-QUIC (DoQ) connection that exploits a signed-to-unsigned integer conversion error when Unbound mishandles the NGTCP2_ERR_STREAM_DATA_BLOCKED error condition. The flaw propagates an implicit conversion of the C literal -1 to a 64-bit unsigned integer (0xFFFFFFFFFFFFFFFF), which exceeds the 62-bit QUIC varint ceiling and triggers a libngtcp2 assertion that aborts the entire resolver process. Exploitation is deterministic - a single QUIC connection with one crafted transport parameter and one DNS query is sufficient - though the attack surface is constrained to deployments compiled with assertions enabled and DoQ actively configured. No public exploit has been identified at time of analysis and the vulnerability is not listed in the CISA KEV catalog.

RemediationAI

The primary remediation is to upgrade Unbound to the version designated as fixed in the NLnet Labs advisory at https://www.nlnetlabs.nl/downloads/unbound/CVE-2026-55991.txt - the exact patched release number was not confirmed in the available intelligence and should be verified directly against the advisory before deployment. Until patching is possible, the most effective compensating control is to disable DNS-over-QUIC support by removing or commenting out any interface: ... @853 quic or equivalent DoQ listener configuration in unbound.conf and restarting the service; this eliminates the attack surface entirely with no impact on standard DNS-over-UDP/TCP or DNS-over-TLS clients. An alternative workaround is to rebuild Unbound with -DNDEBUG in CFLAGS to disable assertion checks, which prevents the abort - however, this suppresses the assertion without fixing the underlying erroneous error code, and the resulting behavior (connection close with a malformed varint) may produce undefined or protocol-violating behavior in libngtcp2; this workaround is not recommended for production without vendor guidance. If DoQ is operationally required and patching is delayed, network-level controls (firewall rules restricting UDP/853 to known, trusted client IP ranges) reduce exposure but do not eliminate it against legitimate DoQ clients.

Affected VersionsENISA

Unbound 1.22.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

The root cause is CWE-195 (Incorrect Conversion between Numeric Types): a signed int literal -1 is passed to ngtcp2_ccerr_set_application_error(), which accepts a uint64_t error_code parameter. C's implicit integer conversion rules widen -1 to the maximum unsigned 64-bit value, 0xFFFFFFFFFFFFFFFF (2^64-1). This value is subsequently serialized by ngtcp2_conn_write_connection_close() as a QUIC variable-length integer (varint). QUIC varints are capped at 62 bits (maximum 2^62-1 = 4611686018427387903); the value 2^64-1 far exceeds this ceiling. The libngtcp2 encoding function ngtcp2_put_uvarintlen() contains a hard assertion assert(n < 4611686018427387904ULL) that fails, causing an abort(). The trigger mechanism is the QUIC transport parameter initial_max_stream_data_bidi_local = 1, which constrains the peer's stream send buffer to one byte, producing stream backpressure (NGTCP2_ERR_STREAM_DATA_BLOCKED) when Unbound attempts to write a DoQ response. Unbound's error handling path then incorrectly calls the connection-close path with the invalid error code. The affected product is identified via CPE cpe:2.3:a:nlnet_labs:unbound:*:*:*:*:*:*:*:* across versions 1.22.0 to 1.25.1.

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 5.9 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 5.9 MEDIUM

AV:N and PR:N confirmed by description; AC:H reflects two non-default prerequisites (assertions compiled in, DoQ configured); A:H for full process abort.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
SUSE MEDIUM
Red Hat 5.9 MEDIUM

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
None
Availability
High

Lifecycle Timeline

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

DescriptionCVE.org

In NLnet Labs Unbound 1.22.0 up to and including 1.25.1, a remote unauthenticated client can trigger a libngtcp2 assertion (if compiled with assertions on) and terminate the entire Unbound process using a single DNS-over-QUIC (DoQ) connection and one normal DNS query. This is caused by an erroneous error value passed to libngtcp2. When 'ngtcp2_conn_writev_stream()' returns 'NGTCP2_ERR_STREAM_DATA_BLOCKED', Unbound continues to call 'ngtcp2_ccerr_set_application_error()' with a '-1' error value. The 'int' literal '-1' is implicitly converted to the function's 'uint64_t error_code' parameter as '0xFFFFFFFFFFFFFFFF'. The follow-on 'ngtcp2_conn_write_connection_close()' serialises that value as a QUIC variable-length integer; because '2^64-1' exceeds the 62-bit varint ceiling, 'ngtcp2_put_uvarintlen()' fails 'assert(n < 4611686018427387904ULL)' and the whole resolver process aborts. A remote, unauthenticated DoQ client can trigger this deterministically with a single QUIC connection by advertising 'initial_max_stream_data_bidi_local = 1' in its transport parameters and sending one DoQ query without ever reading the stream.

Threat Intelligence Overview

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Medium
widely-used resolver, but DoQ feature narrows real exposure
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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

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

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
openSUSE Tumbleweed Fixed
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Performance Computing 15 SP7 Not-Affected
SUSE Linux Enterprise Micro 5.5 Not-Affected
SUSE Linux Enterprise Module for Basesystem 15 SP7 Not-Affected

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