Nixpkgs security tracker

Login with GitHub

Details of issue NIXPKGS-2026-2241

NIXPKGS-2026-2241
published 5 days, 18 hours ago
unbound: security issues < 1.25.2
Permalink CVE-2026-54478
3.7 LOW
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): Low (L)
  • Availability (A): None (N)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): Low (L)
  • Modified Availability (MA): None (N)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • lua55Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua54Packages.luaunbound
    • luajitPackages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
DNS Cookie bypass when combined with proxy-protocol use

In NLnet Labs Unbound 1.18.0 up to and including 1.25.1, when Unbound listens on a 'proxy-protocol-port' interface with 'answer-cookie: yes', the RFC 9018 server-cookie SipHash is computed over the proxy's wire address instead of the PROXYv2-declared client. One server cookie obtained through a given proxy node therefore validates for every PROXYv2-declared source behind that node. On a UDP+proxy-protocol front, an off-path attacker can harvest one cookie with a single legitimate query, then replay it under any spoofed source and pass DNS Cookie checks that were deployed to defeat this in the first place.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-50251
5.3 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): Low (L)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): Low (L)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): Low (L)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • lua55Packages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
    • haskellPackages.unbounded-delays
    • luajitPackages.luaunbound
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Attacker supplied '0.0.0.0'/'::' glue triggers defensive full-cache flush

In NLnet Labs Unbound up to and including version 1.25.1, when 'unwanted-reply-threshold' is enabled (set to any value greater than zero), glue records of 0.0.0.0/::0 can short-circuit Unbound, on systems that can direct such traffic, by issuing DNS queries and receiving seemingly unwanted replies since the remote IP does not match the original source IP of 0.0.0.0/::0. This behavior keeps on looping for the glue records and pushing the counter to the configured 'unwanted-reply-threshold' that triggers a defensive cache clear. A malicious actor who controls a delegation that returns in-bailiwick glue of 0.0.0.0/::0 can drive the counter to the limit of 'unwanted-reply-threshold' to the threshold and trigger a cache clean of the message and rrset caches; at will, indefinitely, without sending a single spoofed packet. The iterator uses the 0.0.0.0/::0 glue, and a system that can route this (e.g., Linux kernel routes the datagram over loopback), Unbound's own listener answers from 127.0.0.1. Because of the mismatch of 0.0.0.0 and 127.0.0.1, in this example, Unbound accounts the reply as an unwanted (probably spoofed) answer. The counter resets to zero on every cache flush, so the attack loops forever.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Permalink CVE-2026-50045
5.3 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): Low (L)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): Low (L)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): Low (L)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • lua55Packages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • luaPackages.luaunbound
    • luajitPackages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
'max-global-quota' reset by DNSSEC validation restarts

In NLnet Labs Unbound 1.22.0 up to and including 1.25.1, a single client query for a deeply nested name under a DNSSEC-signed parent can cause Unbound to send more upstream packets per client query than the configured 'max-global-quota'. This effectively bypasses a security configuration that limits upstream amplification traffic.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-44690
7.5 HIGH
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): High (H)
  • Availability (A): None (N)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): Low (L)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): High (H)
  • Modified Availability (MA): None (N)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • luaPackages.luaunbound
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Cross-zone wildcard cache poisoning via RRSIG.labels manipulation

In NLnet Labs Unbound 1.7.0 up to and including 1.25.1, insufficient validation of the RRSIG.Labels field combined with premature cache writes during RFC 8198 aggressive NSEC processing leads to cache poisoning that permits a malicious actor controlling a single delegated zone to poison arbitrary sibling zones under NSEC-signed parent domains. A malicious actor with one registered domain under an NSEC-signed TLD can serve malicious insecure DNS responses for unrelated sibling domains (sharing the same parent zone). Arbitrary delegations that do not exist under the parent domain and are covered by the parent's NSEC chain can be brought into insecure existence by fraudulent wildcard DS records (less labels than expected, unknown algorithm) from the malicious sibling domain. This allows the malicious actor to inject insecure wildcard records for those delegations.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-44621
5.9 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • python314Packages.pyunbound
    • lua51Packages.luaunbound
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • luaPackages.luaunbound
  • @LeSuisse accepted
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse published on GitHub
Libunbound applications configured with 'unwanted-reply-threshold' could eventually be abruptly terminated

With NLnet Labs Unbound up to and including version 1.25.1, applications using libunbound and configured with 'unwanted-reply-threshold', could eventually be abruptly terminated if the threshold is reached and libunbound needs to call 'libworker_alloc_cleanup' since the function is absent from the function call allow list. When an application using libunbound sets 'unwanted-reply-threshold' to any non-zero value and the iterator queries an authoritative that replies with enough wrong-transaction-ID UDP datagrams to cross the threshold, the 'libworker_alloc_cleanup' will eventually be called. Since the function is absent from the function call allow list, this leads to a fatal exit of libunbound and eventual termination of the embedding application.Unbound itself is not affected since its relevant function 'worker_alloc_cleanup' is registed in the allow list and proceeds to perform the documented cache flush.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-56416
4.8 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): Low (L)
  • Availability (A): Low (L)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): Low (L)
  • Modified Availability (MA): Low (L)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    15 packages
    • luaPackages.luaunbound
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • python314Packages.pyunbound
    • unbound-with-systemd
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
  • @LeSuisse restored package unbound-with-systemd
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Possible heap buffer overflow when validator canonicalizes RDATA that contains domain name

In NLnet Labs Unbound up to and including version 1.25.1, when the validator builds the canonical RDATA form for an RRSIG-covered PX/RP/MINFO/SOA RRset, it computes the address of the second embedded domain name as 'datstart + dname_valid(datstart, ...)' and passes it straight to 'query_dname_tolower()' without checking that a second name is actually present in the RDATA. The wire-format parser accepts multi-dname RRs whose RDATA ends after the first name, so an attacker who runs a DNSSEC-signed authoritative server can deliver a record with an absent second domain name (e.g. SOA record) and cause 'query_dname_tolower()' to walk label-by-label through stale bytes in the per-worker 'env->scratch_buffer', past the end of that heap allocation if 'msg-buffer-size' has been lowered from the default. This leads to heap buffer overflow and on a release build the outcome relies heavily on the contents of the buffer tail and the adjacent heap chunk.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-55991
5.9 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • luaPackages.luaunbound
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • python314Packages.pyunbound
    • haskellPackages.unbound-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbound-generics-unify
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Remote DNS-over-QUIC (DoQ) flow-control assertion failure in libngtcp2

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.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-40691
7.5 HIGH
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): Low (L)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • luaPackages.luaunbound
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • python314Packages.pyunbound
    • haskellPackages.unbound-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbound-generics-unify
  • @LeSuisse accepted
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse published on GitHub
Packet of death for DNSCrypt over TCP

In Unbound 1.9.0 up to and including 1.25.1, when a DNSCrypt query is received over TCP, the routine that encrypts the reply in place fails to bound the reply length against the destination buffer size. The size clamp that protects the UDP path is not applied on the TCP path, so a reply larger than 65504 bytes is shifted forward by 48 bytes inside a buffer of capacity equal to 'msg-buffer-size', writing past the end of the heap allocation. A single malicious encrypted query crashes the resolver and lead to denial of service. This vulnerability needs Unbound to be compiled with DNSCrypt support ('--enable-dnscrypt') and the 'dnscrypt:' clause to be configured and enabled for the listening interfaces.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-46582
3.7 LOW
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): Low (L)
  • Availability (A): None (N)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): Low (L)
  • Modified Availability (MA): None (N)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • luaPackages.luaunbound
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • python314Packages.pyunbound
    • haskellPackages.unbound-generics
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
A wildcard replay, as another piece of data, triggers poisoning in the serve expired reply path

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.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-56444
5.9 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • luajitPackages.luaunbound
    • lua55Packages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Degradation of resolution service when 'discard-timeout' and 'serve-expired-client-timeout' are combined in unusual configuration

In NLnet Labs Unbound 1.20.0 up to and including 1.25.1, when Unbound is configured with 'serve-expired: yes' and 'serve-expired-client-timeout > discard-timeout > 0' (contrary to the suggested values), the discard-timeout branch during the serve expired logic drops an aged client reply without performing the correct accounting for the number of reply addresses for the query. Other identical branches outside of serve expired perform the correct decrement. Since the counter is never decremented in such scenario, it can reach the maximum limit and new clients for duplicate in-flight queries are silently dropped resulting in degradation of resolution service. A malicious actor can exploit the vulnerability by querying the resolver for a client-controlled slow-on-demand authoritative zone that can drive the counter past the threshold. Shipped defaults for 'serve-expired-client-timeout: 1800' and 'discard-timeout: 1900' make the branch unreachable.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-55717
5.9 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • luajitPackages.luaunbound
    • lua55Packages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
'serve-expired-client-timeout' and 'response-ip' CNAME redirect could lead to a crash

In NLnet Labs Unbound 1.10.0 up to and including 1.25.1, when 'serve-expired: yes' is set together with a 'response-ip: <net> redirect' /'response-ip-data: <net> CNAME <target>' rule (or the RPZ 'rpz-cname-override' equivalent), a remote client who controls any delegated domain can crash the daemon. The serve-expired-client-timeout callback runs a two-pass loop to chase the respip-generated CNAME alias; on the second pass it resets 'alias_rrset' but not 'partial_rep'. Later, this inconsistency leads to a NULL pointer dereference and an eventual crash. A malicious actor can exploit the vulnerability by controlling any zone that replies with an A/AAAA record that falls inside the configured response-ip/rpz subnet. By delaying the answer when the previous record has expired, the vulnerable path of 'serve-expired-client-timeout' is taken leading to denial of service via the server crash.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-55708
3.1 LOW
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Local (L)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): High (H)
  • User Interaction (UI): Required (R)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): Low (L)
  • Integrity (I): Low (L)
  • Availability (A): None (N)
  • Modified Attack Vector (MAV): Local (L)
  • Modified Attack Complexity (MAC): Low (L)
  • Modified Privileges Required (MPR): High (H)
  • Modified User Interaction (MUI): Required (R)
  • Modified Confidentiality (MC): Low (L)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): Low (L)
  • Modified Availability (MA): None (N)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • python314Packages.pyunbound
    • haskellPackages.unbound-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbound-generics-unify
    • luaPackages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Privacy/configuration issue when adding local data in views through 'unbound-control'

In NLnet Labs Unbound 1.6.0 up to and including 1.25.1, the 'view_local_data' and 'view_local_datas' commands of 'unbound-control' create a bare local zones tree for an already configured named view when the view is configured with no local data to begin with. However, the creation through the control interface omits adding the default-protected zones (e.g., RFC 1918 reverse, AS112 zones, .onion, .localhost). Once the local zone tree exists without the defaults, every query for a default-protected name from a client mapped to that view escapes to the public DNS via the iterator instead of being answered locally, bypassing local policy expectations.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-50248
6.5 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): High (H)
  • Availability (A): Low (L)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): High (H)
  • Modified Availability (MA): Low (L)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • luajitPackages.luaunbound
    • lua55Packages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
BOGUS configured primary hostname accepted for XFR in auth/rpz zones

In NLnet Labs Unbound 1.7.0 up to and including 1.25.1, when an auth/rpz zone has a configured primary hostname that resolves to BOGUS A/AAAA, it is still considered as a possible XFR endpoint. A malicious actor that can spoof the hostname's A/AAAA record (no valid RRSIG required) becomes the zone's XFR primary and can replaces the entire zone/the resolver's entire response policy.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-50252
5.7 MEDIUM
  • CVSS version (CVSS): 4.0
  • Attack Vector (AV): Adjacent (A)
  • Attack Complexity (AC): Low (L)
  • Attack Requirement (AT): Present (P)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Vulnerable System Impact Confidentiality (VC): None (N)
  • Vulnerable System Impact Integrity (VI): High (H)
  • Vulnerable System Impact Availability (VA): None (N)
  • Subsequent System Impact Confidentiality (SC): None (N)
  • Subsequent System Impact Integrity (SI): High (H)
  • Subsequent System Impact Availability (SA): High (H)
  • Exploit Maturity (E): POC (P)
  • Provider Urgency (U): Amber (Amber)
  • Modified Attack Vector (MAV): Adjacent (A)
  • Modified Attack Complexity (MAC): Low (L)
  • Modified Attack Requirement (MAT): Present (P)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Vulnerable System Impact Confidentiality (MVC): None (N)
  • Modified Vulnerable System Impact Integrity (MVI): High (H)
  • Modified Vulnerable System Impact Availability (MVA): None (N)
  • Modified Subsequent System Impact Confidentiality (MSC): Negligible (N)
  • Modified Subsequent System Impact Integrity (MSI): High (H)
  • Modified Subsequent System Impact Availability (MSA): High (H)
  • Safety (S): Not Defined (X)
  • Automatable (AU): Not Defined (X)
  • Recovery (R): Not Defined (X)
  • Value Density (V): Not Defined (X)
  • Vulnerability Response Effort (RE): Not Defined (X)
  • Confidentiality Req. (CR): Not Defined (X)
  • Integrity Req. (IR): Not Defined (X)
  • Availability Req. (AR): Not Defined (X)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • luaPackages.luaunbound
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • python314Packages.pyunbound
    • haskellPackages.unbound-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbound-generics-unify
  • @LeSuisse accepted
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse published on GitHub
Possible cache poisoning attack by mapping source port population per thread

In NLnet Labs Unbound 1.4.22 up to and including 1.25.1, UDP source port is randomized and intended to serve as a secret value that increases the entropy of DNS transactions. When resolver load balancing policies depend on the source port while their outcome is revealed this secrecy is undermined. The vulnerability arises when the load balancing policy is consistent with respect to the incoming source UDP port and IP address while heavily depending on the incoming source UDP port as a randomization source. When the SO_REUSEPORT configuration option is enabled ('so-reuseport: yes') in Unbound (by default), it meets these conditions, making it vulnerable for DNS cache poisoning attacks. Upon startup, Unbound randomly partitions the available UDP source port space into disjoint subsets of (almost) equal size, assigning each subset to a specific worker thread. When an incoming DNS query is received, the kernel’s SO_REUSEPORT load balancing mechanism deterministically assigns the query to a socket associated with a particular thread. All outgoing DNS queries generated during the resolution of that request use source ports selected exclusively from the port subset assigned to the corresponding thread. Since these port subsets are disjoint across threads, the source port observed in a resolver’s outgoing query to an authoritative name server serves as a reliable indicator of the worker thread that processed the original client query. A malicious actor can acquire the mapping between incoming UDP source ports (for a given fixed source IP address) and Unbound worker threads and leverage it to conduct DNS cache poisoning attacks by effectively lowering the random port population per thread.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-14586
5.9 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • luaPackages.luaunbound
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • python314Packages.pyunbound
    • haskellPackages.unbound-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbound-generics-unify
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Assertion in libngtcp2 when under pressure in high concurrency DNS-over-QUIC environments

In NLnet Labs Unbound 1.22.0 up to and including 1.25.1, in DNS-over-QUIC environments, with high concurrency and under pressure, an assertion in libngtcp2 about monotonic timestamps could trigger and result in server termination and thus denial of service. When interfacing with libngtcp2, for DNS-over-QUIC support in Unbound, it is expected to use monotonic time. Unbound was using realtime instead, and in DoQ environments with high concurrency and under pressure, an assert in libngtcp2 for the quic timestamp would trigger and terminate the server.This vulnerability needs Unbound to be compiled with DoQ support ('--with-libngtcp2') and the 'quic-port' to be configured for the listening interfaces.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Permalink CVE-2026-50243
6.3 MEDIUM
  • CVSS version (CVSS): 4.0
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Attack Requirement (AT): None (N)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Vulnerable System Impact Confidentiality (VC): None (N)
  • Vulnerable System Impact Integrity (VI): Low (L)
  • Vulnerable System Impact Availability (VA): None (N)
  • Subsequent System Impact Confidentiality (SC): None (N)
  • Subsequent System Impact Integrity (SI): Low (L)
  • Subsequent System Impact Availability (SA): None (N)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Attack Requirement (MAT): None (N)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Vulnerable System Impact Confidentiality (MVC): None (N)
  • Modified Vulnerable System Impact Integrity (MVI): Low (L)
  • Modified Vulnerable System Impact Availability (MVA): None (N)
  • Modified Subsequent System Impact Confidentiality (MSC): Negligible (N)
  • Modified Subsequent System Impact Integrity (MSI): Low (L)
  • Modified Subsequent System Impact Availability (MSA): Negligible (N)
  • Safety (S): Not Defined (X)
  • Automatable (AU): Not Defined (X)
  • Recovery (R): Not Defined (X)
  • Value Density (V): Not Defined (X)
  • Vulnerability Response Effort (RE): Not Defined (X)
  • Provider Urgency (U): Not Defined (X)
  • Confidentiality Req. (CR): Not Defined (X)
  • Integrity Req. (IR): Not Defined (X)
  • Availability Req. (AR): Not Defined (X)
  • Exploit Maturity (E): Not Defined (X)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python313Packages.pyunbound
    • luajitPackages.luaunbound
    • lua55Packages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
    • python314Packages.pyunbound
    • prometheus-unbound-exporter
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
'response-ip'/'rpz' can rewrite BOGUS answers instead of returning SERVFAIL

In NLnet Labs Unbound 1.6.2 up to and including 1.25.1, when Unbound is configured with the 'respip' module in front of the validator together with a 'response-ip' redirect rule or an RPZ file with an RPZ-IP trigger, the rewriting handler does not check the security status of the upstream answer and can instead rewrite a BOGUS A/AAAA answer to point to an operator's configured IP. If the validator finds an expired or otherwise invalid RRSIG on an answer whose A record falls within a 'response-ip'/RPZ configuration, the answer is still rewritten and given a hard coded security level of INSECURE. This results in the client receiving an INSECURE NOERROR reply rewritten by the operator's configured IP. A malicious actor can exploit the possible poisonous effect by spoofing a BOGUS A/AAAA answer that falls inside the operator's configured subnet rewrites. Such DNSSEC protected answers are then insecurely redirected to the operator's configured target.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-55973
7.5 HIGH
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): Low (L)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
'dns-error-reporting: yes' leads to stack buffer overflow

In NLnet Labs Unbound 1.23.0 up to and including 1.25.1, when 'dns-error-reporting: yes' is set, the EDNS Report-Channel option (code 18) from the last upstream response is read and uses the option's length as the length of the agent domain. When a domain name check is performed on the agent domain, the returned lenght is not used and if the agent domain is followed by garbage, those bytes are moved onto the tail of the synthetic '_er.' report query name. That query name is later used in the iterator via a subquery to send out the DNS Error Report and when Unbound tries to walk that query name during 'find_closest_of_type()', it strips labels using the query name length rather than stopping at the embedded root, walks one byte past it, and feeds the first garbage byte to 'dname_query_hash()' as a label length writing over the stack variable 'labuf'. One ordinary upstream response from a delegated zone the attacker controls is sufficient to terminate the daemon.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-44687
3.7 LOW
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): Low (L)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): Low (L)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbound-generics
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • lua54Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • haskellPackages.unbounded-delays
    • python314Packages.pyunbound
    • luajitPackages.luaunbound
    • lua55Packages.luaunbound
    • lua53Packages.luaunbound
    • luaPackages.luaunbound
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Off-by-one error in 'harden-below-nxdomain' logic can shadow a stub/forward zone by a legitimate parent's NXDOMAIN

In NLnet Labs Unbound 1.13.2 up to and including 1.25.1, stub or forward zones where the name is below an intermediate labed below a DNSSEC signed zone could be shadowed by the intermediate label's secure NXDOMAIN answer from the parent. This is caused by an off-by-one error in 'harden-below-nxdomain' logic; enabled by default. It effectively bypasses the configuration and the configured stub/forward zone is never contacted. 'harden-below-nxdomain' does an upward DNS cache walk together with a delegation point guard that does not allow NXDOMAIN synthesis above stub/forward zones. The guard tests the domain name but before stripping a label. This results in an iteration where the domain name equals the configured stub/forward zone apex that passes the guard, strips one more label, and probes the cache at the apex's immediate public parent. If that parent has a cached DNSSEC-secure NXDOMAIN, which it will for any private namespace nested two or more labels under a signed public name, the walk returns it and the configured stub/forward upstream is never contacted. This can only be triggered by the query for the intermediate label (between the stub/forward apex and the DNSSEC parent zone).

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Permalink CVE-2026-42955
3.7 LOW
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): Low (L)
  • Availability (A): None (N)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): Low (L)
  • Modified Availability (MA): None (N)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • luaPackages.luaunbound
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • python314Packages.pyunbound
    • haskellPackages.unbound-generics
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Extra fix for CVE-2026-40622 to also clamp the TTL of A/AAAA records disallowing a one-time 'ghost domain' delegation renewal via glue records

In NLnet Labs Unbound 1.16.2 up to and including 1.25.1, a similar vulnerability as with CVE-2026-40622 in the 'ghost domain names' family of attacks was found in Unbound that could extend the ghost domain window by up to one cached TTL configured value for A/AAAA glue records. Similar to other 'ghost domain names' attacks, an adversary needs to control a (ghost) zone and be able to query a vulnerable Unbound. A single client A/AAAA query can cause Unbound to overwrite the cached expired parent-side glue rrset and essentially extend the ghost domain window by up to one cached TTL configured value ('cache-max-ttl'). In configurations where 'harden-referral-path: yes' is used (non-default configuration), no client query is required since Unbound implicitly performs that query. This is a variant of CVE-2026-40622 which only addressed the NS query.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-52863
5.9 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • lua55Packages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
    • luajitPackages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Memory corruption could lead to crash and denial of service

In NLnet Labs Unbound 1.25.0 up to and including 1.25.1, a fix that makes the 'respip' and 'dns64' modules work together, creates a shallow copy of the view name in effect that could lead to memory corruption if the owner of the original view name is jostled out when Unbound is under pressure. Unbound needs to be configured with one of 'respip'/'rpz' modules, together with a module that can attach subqueries (respip CNAME redirection, dns64, subnetcache) and a configured 'access-control-view' while Unbound is under pressure so that joslte logic kicks in and starts dropping slow queries. The subquery is getting a shallow copy of the view name and if the super query which owns the view name is jostled out, memory corruption can occur. Likelihood of a crash is low, since it relies heavily on the underlying memory allocator and the memory layout. Debug memory builds (e.g., ASAN) that catch the free terminate the server.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-50046
5.9 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python313Packages.pyunbound
    • luajitPackages.luaunbound
    • lua55Packages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
    • python314Packages.pyunbound
    • prometheus-unbound-exporter
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Possible heap use-after-free in an error path when a DoT forwarded query is jostled out

In NLnet Labs Unbound 1.15.0 up to and including 1.25.1, the TLS server name used for DNS-over-TLS (DoT) forwarded queries is tied to a struct's ('serviced_query') lifetime but also referenced by another struct ('waiting_tcp'). When the owning struct is jostled out of the mesh while the DoT TCP stream is still handshaking it frees the storage behind the referenced string and if the TLS stream then errors out, it dereferences the freed pointer. The dereference is read-only and the practical impact is a daemon crash resulting in denial of service. A malicious actor that knows a DoT forwarding/stub Unbound's configuration could exploit the vulnerability by quering records in the appropriate zone while keeping Unbound uder pressure so that the jostle logic kicks in. If answers for the vulnerable zone are slow, the likelihood of jostling such queries is higher, although the timing of the jostle needs to be precise. Requirements for a vulnerable Unbound is the existence of a stub/forward zone configured for DoT together with a configured '#authname' suffix on the server identification. The connectivity to the server needs to exhibit a transient failure at the correct time in order to kick off the vulnerable error path.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-41637
3.7 LOW
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): Low (L)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): Low (L)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • luajitPackages.luaunbound
    • lua55Packages.luaunbound
    • lua54Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Degradation of resolution service from improperly accounted client-terminated DNS-over-QUIC queries

In NLnet Labs Unbound 1.22.0 up to and including 1.25.1, client terminated DNS-over-QUIC (DoQ) queries are not accounted properly by Unbound resulting in low-cost inflation of the waiting number of replies for already in-flight resolution queries. This results in degradation of resolution service for new clients for already in-flight queries. A malicious actor can exploit the vulnerability by issuing DoQ queries for query names that need resolution and proceeding on immediately terminating the query by one of STOP_SENDING/RESET_STREAM/CONNECTION_CLOSE QUIC frames. Those terminated DoQ queries are not properly counted for and keep inflating the number of waiting replies for in-flight queries. When the maximum is reached, it results in silent query drops for new clients needing resolution for already in-flight queries. This vulnerability needs Unbound to be compiled with DoQ support ('--with-libngtcp2') and the 'quic-port' to be configured for the listening interfaces. Additionally, a malicious actor needs access to multiple source IPs to bypass the by-default configured 'wait-limit' option.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-55990
5.9 MEDIUM
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): High (H)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): High (H)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    14 packages
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
    • python313Packages.pyunbound
    • prometheus-unbound-exporter
    • lua55Packages.luaunbound
    • lua53Packages.luaunbound
    • lua52Packages.luaunbound
    • lua51Packages.luaunbound
    • luaPackages.luaunbound
    • luajitPackages.luaunbound
    • lua54Packages.luaunbound
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse accepted
  • @LeSuisse published on GitHub
Packet of death for a DNSCrypt misconfigured Unbound

In NLnet Labs Unbound 1.7.0 up to and including 1.25.1, when the 'dnscrypt:' clause lists more 'dnscrypt-provider-cert:' files than there are matching 'dnscrypt-secret-key:' files, Unbound fills only the matched prefix and leaves the tail slots at the '0xdb' fill that libsodium's allocator writes into every allocation. Unbound would then iterate over the number of cert files, not the actual slots, so it walks into a slot with garbage data filled with '0xdb' bytes. Any unauthenticated client that sends one UDP datagram of ≥ 68 bytes whose first 8 bytes are '0xdb' to 'dnscrypt-port' will use that garbage entry which leads to a garbage dereference killing the server. This is a silent faulty configuration that goes unnoticed until triggered with the right client query. Unbound needs to be compiled with DNSCrypt support ('--enable-dnscrypt').

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)
Permalink CVE-2026-32665
7.5 HIGH
  • CVSS version (CVSS): 3.1
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): High (H)
  • Modified Attack Vector (MAV): Network (N)
  • Modified Attack Complexity (MAC): Low (L)
  • Modified Privileges Required (MPR): None (N)
  • Modified User Interaction (MUI): None (N)
  • Modified Confidentiality (MC): None (N)
  • Modified Scope (MS): Unchanged (U)
  • Modified Integrity (MI): None (N)
  • Modified Availability (MA): High (H)
updated 5 days, 18 hours ago by @LeSuisse Activity log
  • Created suggestion
  • @LeSuisse ignored
    15 packages
    • luaPackages.luaunbound
    • lua51Packages.luaunbound
    • lua52Packages.luaunbound
    • lua53Packages.luaunbound
    • lua54Packages.luaunbound
    • lua55Packages.luaunbound
    • luajitPackages.luaunbound
    • prometheus-unbound-exporter
    • python313Packages.pyunbound
    • unbound-with-systemd
    • haskellPackages.unbound-generics-unify
    • haskellPackages.unbound-kind-generics
    • haskellPackages.unbounded-delays
    • haskellPackages.unbound-generics
    • python314Packages.pyunbound
  • @LeSuisse restored package unbound-with-systemd
  • @LeSuisse accepted
  • @LeSuisse ignored maintainer @Scrumplex maintainer.ignore
  • @LeSuisse published on GitHub
Remote DNS-over-QUIC denial of service due to `quic-size` budget bypass

In NLnet Labs Unbound 1.22.0 up to and including 1.25.1, when downstream DNS-over-QUIC (DoQ) is enabled, the first two bidirectional streams on a new QUIC connection (stream_id 0 and 4) bypass the per-stream 'quic-size' gate entirely, and large input buffers are allocated later, after only the 2-byte length prefix has been received from the initial streams. As a result, a remote client can make Unbound exceed the configured 'quic-size' limit with low-cost input. Using only one connection and two streams, each sending a declared 65535-byte length prefix and then holding the streams open, a client can already trivially make Unbound roughly allocate double that amount. This is a remote availability issue / memory-accounting bypass in the downstream DoQ implementation that leads to denial of service for new DoQ clients. This vulnerability needs Unbound to be compiled with DoQ support ('--with-libngtcp2') and the 'quic-port' to be configured for the listening interfaces.

Affected products

Unbound
  • <1.25.2

Matching in nixpkgs

Ignored packages (14)

Package maintainers

Ignored maintainers (1)