CVE-2026-55991 Details
Description
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.
A denial-of-service vulnerability has been identified in NLnet Labs Unbound versions 1.22.0 through 1.25.1. A remote, unauthenticated client can exploit this issue by using a single DNS-over-QUIC connection and sending one normal DNS query. This exploitation triggers an assertion failure in the libngtcp2 library (if Unbound is compiled with assertions enabled), causing the entire Unbound process to terminate. The vulnerability arises from an incorrect error value being passed to libngtcp2. When the function 'ngtcp2_conn_writev_stream()' returns 'NGTCP2_ERR_STREAM_DATA_BLOCKED', Unbound improperly handles the error by converting the integer '-1' into an unsigned 64-bit value, resulting in '0xFFFFFFFFFFFFFFFF'. This value is then serialized as a QUIC variable-length integer, where it exceeds the allowed limit, causing an assertion failure and aborting the resolver process.
Users can upgrade to Unbound version 1.25.2, which includes the necessary fix. Alternatively, for those using Unbound 1.25.1, a patch is available that addresses this vulnerability. Instructions for applying the patch are included in the vulnerability announcement.
Metrics
CVSS 4.0 Severity and Vector Strings:
No CVSS 4.0 data is available for this CVE.
CVSS 3.x Severity and Vector Strings:
No data available for CVSS Version 2.0 on this CVE.
CISA-ADP
Assessed Jul 22, 2026References to Advisories, Solutions, and Tools
By selecting these links, you will be leaving this site. These are references gathered from the official CVE record and are not endorsed by Volerion.
| URL | Source(s) | Tag(s) |
|---|---|---|
| https://www.nlnetlabs.nl/downloads/unbound/CVE-2026-55991.txt | [email protected] | Vendor Advisory |
Weakness Enumeration
| CWE-ID | CWE Name | Source |
|---|---|---|
| CWE-195 | Signed to Unsigned Conversion Error | [email protected] |
Affected Products
| Product | Versions |
|---|---|
| nlnetlabs unbound | >= 1.22.0, < 1.25.2 |
CPE
Remediation
| |
Change History
3 change records found show changes
| Date | Action | Recorded By |
|---|---|---|
| Jul 24, 2026 | Initial Analysis | [email protected] |
| Jul 22, 2026 | CVE Modified | CISA-ADP |
| Jul 22, 2026 | New CVE Received | [email protected] |