Home | History | Annotate | Line # | Download | only in notes
      1 .. Copyright (C) Internet Systems Consortium, Inc. ("ISC")
      2 ..
      3 .. SPDX-License-Identifier: MPL-2.0
      4 ..
      5 .. This Source Code Form is subject to the terms of the Mozilla Public
      6 .. License, v. 2.0.  If a copy of the MPL was not distributed with this
      7 .. file, you can obtain one at https://mozilla.org/MPL/2.0/.
      8 ..
      9 .. See the COPYRIGHT file distributed with this work for additional
     10 .. information regarding copyright ownership.
     11 
     12 Notes for BIND 9.20.23
     13 ----------------------
     14 
     15 Security Fixes
     16 ~~~~~~~~~~~~~~
     17 
     18 - Limit resolver server list size. :cve:`2026-3592`
     19 
     20   When resolving a domain with many nameservers that shared overlapping
     21   IP addresses (e.g., 10 NS records all pointing at the same set of
     22   addresses), BIND could previously waste time querying duplicate
     23   addresses and build up excessively large server lists. Addresses in
     24   the resolver's server list are now deduplicated so that each unique IP is only
     25   queried once per resolution attempt, regardless of how many NS records
     26   point to it. The number of addresses stored per nameserver name
     27   is also now capped at six (combined A and AAAA), preventing memory and CPU overhead from
     28   domains with unusually large NS/glue sets.
     29 
     30   ISC would like to thank Shuhan Zhang from Tsinghua University for
     31   reporting this issue. :gl:`#5641`
     32 
     33 - Fix GSS-API resource leak. :cve:`2026-3039`
     34 
     35   A memory leak was fixed where each GSS-API TKEY negotiation leaked a
     36   security context inside the GSS library. An unauthenticated attacker
     37   could exhaust server memory by sending repeated TKEY queries to a
     38   server with :any:`tkey-gssapi-keytab` configured. The leaked memory was
     39   allocated by the GSS library, bypassing BIND's memory accounting.
     40 
     41   Multi-round GSS-API negotiation (GSS_S_CONTINUE_NEEDED) is now
     42   rejected, as BIND never supported it correctly and Kerberos/SPNEGO
     43   completes in a single round.
     44 
     45   ISC would like to thank Vitaly Simonovich for bringing this
     46   vulnerability to our attention. :gl:`#5752`
     47 
     48 - Disable recursion, UPDATE, and NOTIFY for non-IN views.
     49   :cve:`2026-5946`
     50 
     51   Recursion, dynamic updates (UPDATE), and zone change notifications
     52   (NOTIFY) are now disabled for views with a class other than IN (such
     53   as CHAOS or HESIOD); authoritative service for non-IN zones (e.g.
     54   version.bind in class CHAOS) continues to work as before. Servers
     55   configured with :namedconf:ref:`recursion yes; <recursion>`
     56   in a non-IN view log a warning at
     57   startup, and :iscman:`named-checkconf` flags the same condition. UPDATE and
     58   NOTIFY messages that specify the meta-classes ANY or NONE in the
     59   question section are now rejected with FORMERR.
     60 
     61   This addresses a set of closely related security issues collectively
     62   identified as CVE-2026-5946. ISC would like to thank Mcsky23 for
     63   bringing these issues to our attention. :gl:`#5784`
     64 
     65 - Avoid unbounded recursion loop. :cve:`2026-5950`
     66 
     67   A bug during bad server handling could cause the resolver to enter an
     68   infinite loop, continuously sending queries to an upstream server with
     69   no exit condition, until the resolver query timeout was hit. This has
     70   been fixed.
     71 
     72   ISC would like to thank Billy Baraja (BielraX) for bringing this issue
     73   to our attention. :gl:`#5804`
     74 
     75 - Fix crash in resolver when SIG(0)-signed responses are received under
     76   load. :cve:`2026-5947`
     77 
     78   A resolver could crash when handling a SIG(0)-signed response if the
     79   matching client query was cancelled while signature verification was
     80   still in progress  for example, when the recursive-clients quota was
     81   exhausted. This has been fixed.
     82 
     83   ISC would like to thank Naoki Wakamatsu for bringing this
     84   vulnerability to our attention. :gl:`#5819`
     85 
     86 - Fix use-after-free error in DNS-over-HTTPS when processing HTTP/2
     87   SETTINGS frames. :cve:`2026-3593`
     88 
     89   Previously, a use-after-free vulnerability in the DNS-over-HTTPS implementation
     90   could cause :iscman:`named` to crash when a client sent a flood of HTTP/2
     91   SETTINGS frames while a DoH response was being written. This affected
     92   servers with DoH (DNS-over-HTTPS) enabled and has been fixed.
     93 
     94   ISC would like to thank Naresh Kandula Parmar (Nottiboy) for reporting
     95   this. :gl:`#5755`
     96 
     97 - Fix outgoing zone transfers' quota issue.
     98 
     99   Unauthorized clients could consume the entire outgoing zone-transfer quota and
    100   block authorized zone transfer clients. This has been fixed.
    101   :gl:`#3589`
    102 
    103 Feature Changes
    104 ~~~~~~~~~~~~~~~
    105 
    106 - Fix CPU spikes and slow queries when cache approaches memory limit.
    107 
    108   Cache cleanup is now spread probabilistically to avoid CPU usage spikes and a
    109   drop in query throughput. :gl:`#5891`
    110 
    111 Bug Fixes
    112 ~~~~~~~~~
    113 
    114 - Use the zone file's basename as origin in DNSSEC tools.
    115 
    116   In :iscman:`dnssec-signzone` and :iscman:`dnssec-verify`, when the zone origin is not
    117   specified using the ``-o`` parameter, the default behavior is to try to
    118   sign using the zone's file name as the origin. So, for example,
    119   ``dnssec-signzone -S example.com`` will work, so long as the file name
    120   matches the zone name.
    121 
    122   This now also works if the zone is in a different directory. For
    123   example, ``dnssec-signzone -S zones/example.com`` will set the origin
    124   value to ``example.com``. :gl:`#5678`
    125 
    126 - Fix a possible race condition during zone transfers.
    127 
    128   The :iscman:`named` process could terminate unexpectedly when
    129   processing an IXFR message during a zone transfer. This has been
    130   fixed. :gl:`#5767`
    131 
    132 - Fix :iscman:`named` crash when processing SIG records in dynamic updates.
    133 
    134   Previously, :iscman:`named` could abort if a client sent a dynamic
    135   update containing a SIG record (the legacy signature type) to a zone
    136   configured with an update-policy. The function `dns_db_findrdataset`
    137   had an incorrect requirements prerequisite that prevented SIG records
    138   from being looked up, which was triggered as part of processing an UPDATE
    139   request and could be triggered remotely by any client permitted to
    140   send updates. This has been fixed by ensuring that SIG records are
    141   handled consistently with RRSIG records during update processing.
    142   :gl:`#5818`
    143 
    144 - Fix zone verification of NSEC3 signed zones.
    145 
    146   Previously, when computing the compressed bitmap during verification
    147   of an NSEC3-signed zone, an undersized buffer was used that resulted
    148   in an out-of-bounds write if there were too many active windows in the
    149   bitmap. This impacted the mirror zones which are NSEC3-signed,
    150   :iscman:`dnssec-signzone` and :iscman:`dnssec-verify`. This has been fixed.
    151   :gl:`#5834`
    152 
    153 - Prevent a crash when using both :any:`dns64` and :any:`filter-aaaa`.
    154 
    155   An assertion failure could be triggered if both :any:`dns64` and the
    156   :any:`filter-aaaa` plugin were in use simultaneously. This happened if the
    157   plugin triggered a second recursion process, which then attempted to
    158   store DNS64 state information in a pointer that had already been set
    159   by the original recursion process. This has been fixed. :gl:`#5854`
    160 
    161 - Fixed an assertion failure when processing catalog zones.
    162 
    163   If a TXT record containing an invalid name TSIG key name was found
    164   when processing a catalog zone member's primaries definition,
    165   ``dns_name_free`` was incorrectly called, triggering an assertion. This has
    166   been fixed. :gl:`#5858`
    167 
    168 - Prevent malicious DNSSEC zones from exhausting validator CPU.
    169 
    170   A DNSSEC-signed zone could publish a DNSKEY with an unusually large
    171   RSA public exponent and force any validator resolving names in that
    172   zone to spend disproportionate CPU verifying signatures.  The
    173   validator now rejects such DNSKEYs, matching the limit already applied
    174   to keys read from files or HSMs. :gl:`#5881`
    175 
    176 - Fix :iscman:`rndc-confgen` aborting on HMAC-SHA-384/512 keys above 512 bits.
    177 
    178   :iscman:`rndc-confgen` (with either ``-A hmac-sha384`` or
    179   ``-A hmac-sha512``) previously documented a ``-b``
    180   range of 1..1024, but any value above 512 aborted on hardened builds
    181   instead of producing a key. The full advertised range now works.
    182   :gl:`#5903`
    183 
    184 - Prevent crafted queries from degrading RRL performance.
    185 
    186   With response rate limiting enabled, an attacker sending queries from
    187   many spoofed source addresses could steer entries into the same slot
    188   of the internal rate-limit table and slow down query processing on the
    189   affected server. The table now uses a per-process keyed hash so the
    190   placement of entries cannot be predicted or influenced from the
    191   network. :gl:`#5906`
    192 
    193 - Prevent rare :iscman:`named` crash when notifies are cancelled.
    194 
    195   Under heavy load, :iscman:`named` could occasionally crash when a queued
    196   outbound notify or zone refresh was cancelled at the moment it was
    197   being sent  for example, while a zone was being reloaded or removed.
    198   The race that caused the crash is now prevented. :gl:`#5915`
    199 
    200 - Stop :iscman:`delv` from aborting on a malformed query name.
    201 
    202   :iscman:`delv` previously aborted with SIGABRT instead of exiting cleanly when given a query
    203   name that failed wire-format conversion (e.g. a label longer than 63
    204   octets). After this change :iscman:`delv` prints the parse error and exits with
    205   a normal failure code. :gl:`#5916`
    206 
    207 - Fix a crash when reconfiguring while an NTA is being rechecked.
    208 
    209   Previously, if :iscman:`named` was reconfigured or shut down while a negative trust anchor
    210   was being rechecked against authoritative servers, the in-flight
    211   recheck could outlive the view that owned it and cause :iscman:`named` to
    212   crash.  This has been fixed. :gl:`#5938`
    213 
    214 - Fix a bug in :any:`allow-query`/:any:`allow-transfer` catalog zone custom
    215   properties.
    216 
    217   The :iscman:`named` process could terminate unexpectedly when
    218   processing a catalog zone with an invalid :any:`allow-query` or
    219   :any:`allow-transfer` custom property (i.e. having a non-APL type)
    220   coexisting with the valid property. This has been fixed. :gl:`#5941`
    221 
    222 - Fix a memory leak issue in catalog zones.
    223 
    224   The :iscman:`named` process could leak small amounts of memory when
    225   processing a catalog zone entry which had defined custom primary
    226   servers with TSIG keys, if both the regular ``primaries`` custom
    227   property syntax and the legacy alternative syntax (``masters``) were used at the
    228   same time. This has been fixed. :gl:`#5943`
    229 
    230 - Fix suppressed missing-glue check in :iscman:`named-checkzone`.
    231 
    232   :iscman:`named-checkzone` and :option:`named-checkconf -z` silently
    233   skipped the missing-glue check for any NS name that had already
    234   triggered an extra-AAAA-glue warning, so zones missing required A glue
    235   could pass validation and be deployed with broken delegations.
    236   :gl:`!11899`
    237 
    238 - Implement seamless outgoing TCP connection reuse.
    239 
    240   The resolver can and will reuse outgoing TCP connections to the same
    241   host, as recommended by :rfc:`7766`. This prevents a whole class of
    242   attacks that abuse the fact that establishing a TCP connection is
    243   expensive and it is fairly easy to deplete the outgoing TCP ports by
    244   putting them into ``TIME_WAIT`` state.
    245 
    246   The number of pipelined queries per connection is capped at 256 to
    247   limit the impact of a connection drop. :gl:`!11845`
    248 
    249 - Reject record sets too large to serve in DNS.
    250 
    251   When BIND was asked to store a record set whose total size exceeded
    252   what fit in a DNS message, it would allocate memory and build the
    253   structure, then fail later at response time. Such oversized record
    254   sets are now rejected at the time of storage with an error, avoiding
    255   wasted work on data that can never be served. :gl:`!11963`
    256 
    257 
    258