Home | History | Annotate | Line # | Download | only in changelog
      1  1.1  christos .. Copyright (C) Internet Systems Consortium, Inc. ("ISC")
      2  1.1  christos ..
      3  1.1  christos .. SPDX-License-Identifier: MPL-2.0
      4  1.1  christos ..
      5  1.1  christos .. This Source Code Form is subject to the terms of the Mozilla Public
      6  1.1  christos .. License, v. 2.0.  If a copy of the MPL was not distributed with this
      7  1.1  christos .. file, you can obtain one at https://mozilla.org/MPL/2.0/.
      8  1.1  christos ..
      9  1.1  christos .. See the COPYRIGHT file distributed with this work for additional
     10  1.1  christos .. information regarding copyright ownership.
     11  1.1  christos 
     12  1.1  christos BIND 9.20.23
     13  1.1  christos ------------
     14  1.1  christos 
     15  1.1  christos Security Fixes
     16  1.1  christos ~~~~~~~~~~~~~~
     17  1.1  christos 
     18  1.1  christos - Fix outgoing zone transfers' quota issue. ``1006b044b7``
     19  1.1  christos 
     20  1.1  christos   Unauthorized clients could consume outgoing zone transfers quota and
     21  1.1  christos   block authorized zone transfer clients. This has been fixed.
     22  1.1  christos   :gl:`#3589`
     23  1.1  christos 
     24  1.1  christos - [CVE-2026-3592] Limit resolver server list size. ``c3f3879560``
     25  1.1  christos 
     26  1.1  christos   When resolving a domain with many nameservers that share overlapping
     27  1.1  christos   IP addresses (e.g., 10 NS records all pointing at the same set of
     28  1.1  christos   addresses), BIND could previously waste time querying duplicate
     29  1.1  christos   addresses and build up excessively large server lists. Deduplicate
     30  1.1  christos   addresses in the resolver's server list so that each unique IP is only
     31  1.1  christos   queried once per resolution attempt, regardless of how many NS records
     32  1.1  christos   point to it and cap the number of addresses stored per nameserver name
     33  1.1  christos   to 6 (combined A and AAAA), preventing memory and CPU overhead from
     34  1.1  christos   domains with unusually large NS/glue sets. :gl:`#5641`
     35  1.1  christos 
     36  1.1  christos - [CVE-2026-3039] Fix GSS-API resource leak. ``92d5c60855``
     37  1.1  christos 
     38  1.1  christos   Fixed a memory leak where each GSS-API TKEY negotiation leaked a
     39  1.1  christos   security context inside the GSS library. An unauthenticated attacker
     40  1.1  christos   could exhaust server memory by sending repeated TKEY queries to a
     41  1.1  christos   server with tkey-gssapi-keytab configured. The leaked memory was
     42  1.1  christos   allocated by the GSS library, bypassing BIND's memory accounting.
     43  1.1  christos 
     44  1.1  christos   Multi-round GSS-API negotiation (GSS_S_CONTINUE_NEEDED) is now
     45  1.1  christos   rejected, as BIND never supported it correctly and Kerberos/SPNEGO
     46  1.1  christos   completes in a single round.
     47  1.1  christos 
     48  1.1  christos   Also implemented missing RFC 3645 requirement: the client now verifies
     49  1.1  christos   that mutual authentication and integrity flags are granted by the
     50  1.1  christos   GSS-API mechanism (Section 3.1.1). :gl:`#5752`
     51  1.1  christos 
     52  1.1  christos - [CVE-2026-5950] Avoid unbounded recursion loop. ``568be408bc``
     53  1.1  christos 
     54  1.1  christos   A bug during bad server handling could cause the resolver to enter an
     55  1.1  christos   infinite loop, continuously sending queries to an upstream server with
     56  1.1  christos   no exit condition, until the resolver query timeout was hit. This has
     57  1.1  christos   been fixed.
     58  1.1  christos 
     59  1.1  christos   ISC would like to thank Billy Baraja (BielraX) for bringing this issue
     60  1.1  christos   to our attention. :gl:`#5804`
     61  1.1  christos 
     62  1.1  christos - [CVE-2026-5947] Fix crash in resolver when SIG(0)-signed responses are
     63  1.1  christos   received under load. ``9831f41894``
     64  1.1  christos 
     65  1.1  christos   A resolver could crash when handling a SIG(0)-signed response if the
     66  1.1  christos   matching client query was cancelled while signature verification was
     67  1.1  christos   still in progress  for example, when the recursive-clients quota was
     68  1.1  christos   exhausted. This has been fixed. :gl:`#5819`
     69  1.1  christos 
     70  1.1  christos - [CVE-2026-3593] Add system test for HTTP/2 SETTINGS frame flood.
     71  1.1  christos   ``3be272e26d``
     72  1.1  christos 
     73  1.1  christos   A use-after-free vulnerability in the DNS-over-HTTPS implementation
     74  1.1  christos   could cause named to crash when a client sends a flood of HTTP/2
     75  1.1  christos   SETTINGS frames while a DoH response is being written. This affects
     76  1.1  christos   servers with DoH (DNS-over-HTTPS) enabled.
     77  1.1  christos 
     78  1.1  christos   ISC would like to thank Naresh Kandula Parmar (Nottiboy) for reporting
     79  1.1  christos   this.
     80  1.1  christos 
     81  1.1  christos   For: #5755
     82  1.1  christos 
     83  1.1  christos - [CVE-2026-5946] Disable recursion, UPDATE, and NOTIFY for non-IN
     84  1.1  christos   views. ``014be8be87``
     85  1.1  christos 
     86  1.1  christos   Recursion, dynamic updates (UPDATE), and zone change notifications
     87  1.1  christos   (NOTIFY) are now disabled for views with a class other than IN (such
     88  1.1  christos   as CHAOS or HESIOD); authoritative service for non-IN zones (e.g.
     89  1.1  christos   version.bind in class CHAOS) continues to work as before. Servers
     90  1.1  christos   configured with recursion yes in a non-IN view will log a warning at
     91  1.1  christos   startup, and named-checkconf flags the same condition. UPDATE and
     92  1.1  christos   NOTIFY messages that specify the meta-classes ANY or NONE in the
     93  1.1  christos   question section are now rejected with FORMERR.
     94  1.1  christos 
     95  1.1  christos   This addresses a set of closely related security issues collectively
     96  1.1  christos   identified as CVE-2026-5946. ISC would like to thank Mcsky23 for
     97  1.1  christos   bringing these issues to our attention.
     98  1.1  christos 
     99  1.1  christos Removed Features
    100  1.1  christos ~~~~~~~~~~~~~~~~
    101  1.1  christos 
    102  1.1  christos - Remove obsolete KEY record EXTENDED flag deprecated by RFC 3445.
    103  1.1  christos   ``99c226576a``
    104  1.1  christos 
    105  1.1  christos   KEY resource records originally defined EXTENDED flag that was removed
    106  1.1  christos   by RFC 3445 back in 2002. BIND still carried code to parse and emit
    107  1.1  christos   it, including the additional two-octet flags field that followed when
    108  1.1  christos   the EXTENDED bit was set. That handling has been removed and the
    109  1.1  christos   affected bit positions are now reserved.
    110  1.1  christos 
    111  1.1  christos   Dropping the extended-flags handling also eliminates a possible crash
    112  1.1  christos   that could be reached when signing a zone containing an invalid key.
    113  1.1  christos   :gl:`#5900`
    114  1.1  christos 
    115  1.1  christos   Partial backport of MR !11961 :gl:`!11962`
    116  1.1  christos 
    117  1.1  christos Feature Changes
    118  1.1  christos ~~~~~~~~~~~~~~~
    119  1.1  christos 
    120  1.1  christos - Revert isdelegation() to return boolean value again. ``6d89bfdf03``
    121  1.1  christos 
    122  1.1  christos   :gl:`#5838` :gl:`!11802`
    123  1.1  christos 
    124  1.1  christos - Fix CPU spikes and slow queries when cache approaches memory limit.
    125  1.1  christos   ``e21ae6358a``
    126  1.1  christos 
    127  1.1  christos   When the cache grew close to the configured max-cache-size, every
    128  1.1  christos   subsequent entry triggered all worker threads to run cache cleanup at
    129  1.1  christos   once, causing CPU spikes and a drop in query throughput. Cleanup is
    130  1.1  christos   now spread probabilistically across inserts as memory approaches the
    131  1.1  christos   limit, so the work is distributed evenly instead of piling up at the
    132  1.1  christos   threshold.
    133  1.1  christos 
    134  1.1  christos - Fix off by one error in dnssec-ksr sign. ``819df0d19e``
    135  1.1  christos 
    136  1.1  christos   If the inception time of the signature is exactly equal to the
    137  1.1  christos   inactive time of the key, add the signature. :gl:`!11795`
    138  1.1  christos 
    139  1.1  christos Bug Fixes
    140  1.1  christos ~~~~~~~~~
    141  1.1  christos 
    142  1.1  christos - Check validator name when adding EDE text. ``b6c3390aea``
    143  1.1  christos 
    144  1.1  christos   When a validator is being shut down, the associated name `val->name`
    145  1.1  christos   is set to NULL.  This could cause a crash if a worker thread
    146  1.1  christos   subsequently added an EDE code with `val->name` in the extra text.
    147  1.1  christos 
    148  1.1  christos   `validator_addede()` now checks whether the name is NULL before trying
    149  1.1  christos   to add it to the extra text. :gl:`#5613` :gl:`!11977`
    150  1.1  christos 
    151  1.1  christos - Use the zone file's basename as origin in DNSSEC tools. ``097c14da45``
    152  1.1  christos 
    153  1.1  christos   In `dnssec-signzone` and `dnssec-verify`, when the zone origin is not
    154  1.1  christos   specified using the `-o` parameter, the default behavior is to try to
    155  1.1  christos   sign using the zone's file name as the origin. So, for example,
    156  1.1  christos   `dnssec-signzone -S example.com` will work, so long as the file name
    157  1.1  christos   matches the zone name.
    158  1.1  christos 
    159  1.1  christos   This now also works if the zone is in a different directory. For
    160  1.1  christos   example, `dnssec-signzone -S zones/example.com` will set the origin
    161  1.1  christos   value to `example.com`. :gl:`#5678` :gl:`!11784`
    162  1.1  christos 
    163  1.1  christos - Fix a possible race condition during zone transfers. ``a48b287d9f``
    164  1.1  christos 
    165  1.1  christos   The :iscman:`named` process could terminate unexpectedly when
    166  1.1  christos   processing an IXFR message during a zone transfer. This has been
    167  1.1  christos   fixed. :gl:`#5767` :gl:`!11799`
    168  1.1  christos 
    169  1.1  christos - Make BIND9 compatible with OpenSSL 4. ``8242105d5d``
    170  1.1  christos 
    171  1.1  christos   OPENSSL_cleanup() in OpenSSL 4 doesn't free the memory, and that is
    172  1.1  christos   not compatible with BIND 9's memory leak detection code. Don't use
    173  1.1  christos   custom allocation/deallocation functions for OpenSSL's internal memory
    174  1.1  christos   management.
    175  1.1  christos 
    176  1.1  christos   See https://github.com/openssl/openssl/pull/29721 :gl:`#5808`
    177  1.1  christos   :gl:`!11896`
    178  1.1  christos 
    179  1.1  christos - Fix named crash when processing SIG records in dynamic updates.
    180  1.1  christos   ``9e34ef0f7e``
    181  1.1  christos 
    182  1.1  christos   Previously, :iscman:`named` could abort if a client sent a dynamic
    183  1.1  christos   update containing a SIG record (the legacy signature type) to a zone
    184  1.1  christos   configured with an update-policy. The function `dns_db_findrdataset`
    185  1.1  christos   had an incorrect requirements prerequisite that prevented SIG records
    186  1.1  christos   being looked up, which was triggered as part of processing an UPDATE
    187  1.1  christos   request and could be triggered remotely by any client permitted to
    188  1.1  christos   send updates. This has been fixed by ensuring that SIG records are
    189  1.1  christos   handled consistently with RRSIG records during update processing.
    190  1.1  christos   :gl:`#5818` :gl:`!11876`
    191  1.1  christos 
    192  1.1  christos - Fix crash in resolver when SIG(0)-signed responses are received under
    193  1.1  christos   load. ``bbe0b9b8f6``
    194  1.1  christos 
    195  1.1  christos   A resolver could crash when handling a SIG(0)-signed response if the
    196  1.1  christos   matching client query was cancelled while signature verification was
    197  1.1  christos   still in progress  for example, when the recursive-clients quota was
    198  1.1  christos   exhausted. This has been fixed. :gl:`#5819`
    199  1.1  christos 
    200  1.1  christos - Fix zone verification of NSEC3 signed zones. ``de4a9b4fa6``
    201  1.1  christos 
    202  1.1  christos   Previously, when computing the compressed bitmap during verification
    203  1.1  christos   of an NSEC3-signed zone, an undersized buffer was used that resulted
    204  1.1  christos   in an out-of-bounds write if there were too many active windows in the
    205  1.1  christos   bitmap. This impacted mirror zones which are NSEC3-signed,
    206  1.1  christos   `dnssec-signzone` and `dnssec-verifyzone`. This has been fixed.
    207  1.1  christos   :gl:`#5834` :gl:`!11833`
    208  1.1  christos 
    209  1.1  christos - Prevent a crash when using both dns64 and filter-aaaa. ``ddcacbc5a8``
    210  1.1  christos 
    211  1.1  christos   An assertion failure could be triggered if both `dns64` and the
    212  1.1  christos   `filter-aaaa` plugin were in use simultaneously. This happened if the
    213  1.1  christos   plugin triggered a second recursion process, which then attempted to
    214  1.1  christos   store DNS64 state information in a pointer that had already been set
    215  1.1  christos   by the original recursion process. This has been fixed. :gl:`#5854`
    216  1.1  christos   :gl:`!11967`
    217  1.1  christos 
    218  1.1  christos - Remove unnecessary dns_name_free call. ``35d94fffb0``
    219  1.1  christos 
    220  1.1  christos   When processing a catalog zone member's primaries definition and there
    221  1.1  christos   is a TXT record containing an invalid name TSIG key name,
    222  1.1  christos   dns_name_free was incorrectly called triggering an assertion. This has
    223  1.1  christos   been fixed. :gl:`#5858` :gl:`!11848`
    224  1.1  christos 
    225  1.1  christos - Tidy up the cleanup path in check_signer() ``cf517f73d5``
    226  1.1  christos 
    227  1.1  christos   When check_signer() processed a DNSKEY whose public-key data could not
    228  1.1  christos   be parsed, the early return on the parse error skipped the cleanup of
    229  1.1  christos   the cloned signature rdataset.  In every code path that currently
    230  1.1  christos   reaches this function the cloned rdataset holds no resources, so no
    231  1.1  christos   memory was actually leaked, but the cleanup is restructured so the
    232  1.1  christos   parse and the iteration cannot diverge again. :gl:`#5869` :gl:`!11957`
    233  1.1  christos 
    234  1.1  christos - Prevent malicious DNSSEC zones from exhausting validator CPU.
    235  1.1  christos   ``c425827743``
    236  1.1  christos 
    237  1.1  christos   A DNSSEC-signed zone could publish a DNSKEY with an unusually large
    238  1.1  christos   RSA public exponent and force any validator resolving names in that
    239  1.1  christos   zone to spend disproportionate CPU verifying signatures.  The
    240  1.1  christos   validator now rejects such DNSKEYs, matching the limit already applied
    241  1.1  christos   to keys read from files or HSMs. :gl:`#5881` :gl:`!11923`
    242  1.1  christos 
    243  1.1  christos - Fix inverted gethostname() check in rndc status. ``5ede4a87eb``
    244  1.1  christos 
    245  1.1  christos   The replacement of named_os_gethostname() with raw gethostname()
    246  1.1  christos   inverted the success check: the "localhost" fallback runs on success,
    247  1.1  christos   and on failure the uninitialized hostname buffer is read by
    248  1.1  christos   snprintf(), leaking stack memory via the rndc status reply.
    249  1.1  christos   :gl:`#5889` :gl:`!11881`
    250  1.1  christos 
    251  1.1  christos - Fix rndc-confgen aborting on HMAC-SHA-384/512 keys above 512 bits.
    252  1.1  christos   ``7e1eace6cd``
    253  1.1  christos 
    254  1.1  christos   `rndc-confgen -A hmac-sha384` and `-A hmac-sha512` documented a `-b`
    255  1.1  christos   range of 1..1024, but any value above 512 aborted on hardened builds
    256  1.1  christos   instead of producing a key. The full advertised range now works.
    257  1.1  christos   :gl:`#5903` :gl:`!11910`
    258  1.1  christos 
    259  1.1  christos - Prevent crafted queries from degrading RRL performance. ``bf4cdca7e9``
    260  1.1  christos 
    261  1.1  christos   With response rate limiting enabled, an attacker sending queries from
    262  1.1  christos   many spoofed source addresses could steer entries into the same slot
    263  1.1  christos   of the internal rate-limit table and slow down query processing on the
    264  1.1  christos   affected server. The table now uses a per-process keyed hash so the
    265  1.1  christos   placement of entries cannot be predicted or influenced from the
    266  1.1  christos   network. :gl:`#5906` :gl:`!11952`
    267  1.1  christos 
    268  1.1  christos - Fix swapped arguments in redirect2() single-label branch.
    269  1.1  christos   ``3728b405ea``
    270  1.1  christos 
    271  1.1  christos   On a recursive resolver with nxdomain-redirect configured, an NXDOMAIN
    272  1.1  christos   result for a query whose qname is the root could corrupt the view's
    273  1.1  christos   nxdomain-redirect target, after which the redirect feature stopped
    274  1.1  christos   working for every subsequent query in that view until named was
    275  1.1  christos   restarted. :gl:`#5908` :gl:`!11913`
    276  1.1  christos 
    277  1.1  christos - Free per-command rndc state when response serialisation fails.
    278  1.1  christos   ``070b394f53``
    279  1.1  christos 
    280  1.1  christos   When isccc_cc_towire failed while building an rndc reply,
    281  1.1  christos   control_respond returned without releasing the per-command request,
    282  1.1  christos   response, HMAC secret copy, and text buffer.  They were eventually
    283  1.1  christos   freed when the connection closed, but until then the HMAC key copy
    284  1.1  christos   stayed in named's memory.  The failure path now goes through the same
    285  1.1  christos   cleanup label as every other error. :gl:`#5913` :gl:`!11919`
    286  1.1  christos 
    287  1.1  christos - Prevent rare named crash when notifies are cancelled. ``49509dcbae``
    288  1.1  christos 
    289  1.1  christos   Under heavy load, named could occasionally crash when a queued
    290  1.1  christos   outbound notify or zone refresh was cancelled at the moment it was
    291  1.1  christos   being sent  for example, while a zone was being reloaded or removed.
    292  1.1  christos   The race that caused the crash is now prevented. :gl:`#5915`
    293  1.1  christos   :gl:`!11922`
    294  1.1  christos 
    295  1.1  christos - Stop delv from aborting on a malformed query name. ``ca8315bb4d``
    296  1.1  christos 
    297  1.1  christos   delv aborts with SIGABRT instead of exiting cleanly when given a query
    298  1.1  christos   name that fails wire-format conversion (e.g. a label longer than 63
    299  1.1  christos   octets). After this change delv prints the parse error and exits with
    300  1.1  christos   a normal failure code. :gl:`#5916` :gl:`!11927`
    301  1.1  christos 
    302  1.1  christos - Fix a crash when reconfiguring while an NTA is being rechecked.
    303  1.1  christos   ``971ca4df1a``
    304  1.1  christos 
    305  1.1  christos   When named was reconfigured or shut down while a negative trust anchor
    306  1.1  christos   was being rechecked against authoritative servers, the in-flight
    307  1.1  christos   recheck could outlive the view that owned it and cause `named` to
    308  1.1  christos   crash.  This has been fixed. :gl:`#5938` :gl:`!11966`
    309  1.1  christos 
    310  1.1  christos - Fix a bug in allow-query/allow-transfer catalog zone custom
    311  1.1  christos   properties. ``e962fd459e``
    312  1.1  christos 
    313  1.1  christos   The :iscman:`named` process could terminate unexpectedly when
    314  1.1  christos   processing a catalog zone with an invalid ``allow-query`` or
    315  1.1  christos   ``allow-transfer`` custom property (i.e. having a non-APL type)
    316  1.1  christos   coexisting with the valid property. This has been fixed. :gl:`#5941`
    317  1.1  christos   :gl:`!11975`
    318  1.1  christos 
    319  1.1  christos - Fix a stack use-after-free in qpzone. ``ddea991c07``
    320  1.1  christos 
    321  1.1  christos   In previous_closest_nsec(), a new qpreader was opened to search the
    322  1.1  christos   NSEC tree. It was possible for that to be used to update a QP iterator
    323  1.1  christos   object owned by the caller, and then be destroyed when the function
    324  1.1  christos   returned.
    325  1.1  christos 
    326  1.1  christos   This has been addressed by having the caller open the NSEC qpreader
    327  1.1  christos   instead. :gl:`#5942` :gl:`!11956`
    328  1.1  christos 
    329  1.1  christos - Fix a memory leak issue in the catalog zones. ``5fcb6d8809``
    330  1.1  christos 
    331  1.1  christos   The :iscman:`named` process could leak small amounts of memory when
    332  1.1  christos   processing a catalog zone entry which had defined custom primary
    333  1.1  christos   servers with TSIG keys using both the regular ``primaries`` custom
    334  1.1  christos   property syntax and the legacy alternative syntax (``masters``) at the
    335  1.1  christos   same time. This has been fixed. :gl:`#5943` :gl:`!11973`
    336  1.1  christos 
    337  1.1  christos - Fix suppressed missing-glue check in named-checkzone. ``dc5eb3fe25``
    338  1.1  christos 
    339  1.1  christos   named-checkzone and named-checkconf -z silently skipped the
    340  1.1  christos   missing-glue check for any NS name that had already triggered an
    341  1.1  christos   extra-AAAA-glue warning, so zones missing required A glue could pass
    342  1.1  christos   validation and be deployed with broken delegations. :gl:`!11905`
    343  1.1  christos 
    344  1.1  christos - Implement seamless outgoing TCP connection reuse. ``eb117e16b9``
    345  1.1  christos 
    346  1.1  christos   The resolver can and will reuse outgoing TCP connections to the same
    347  1.1  christos   host, as recommended by RFC 7766. This prevents a whole class of
    348  1.1  christos   attacks that abuse the fact that establishing a TCP connection is
    349  1.1  christos   expensive and it is fairly easy to deplete the outgoing TCP ports by
    350  1.1  christos   putting them into TIME_WAIT state.
    351  1.1  christos 
    352  1.1  christos   The number of pipelined queries per connection is capped at 256 to
    353  1.1  christos   limit the impact of a connection drop. :gl:`!11846`
    354  1.1  christos 
    355  1.1  christos - Pass empty string instead of NULL to ns_client_dumpmessage()
    356  1.1  christos   ``24cdf8c096``
    357  1.1  christos 
    358  1.1  christos   Pass "" instead of NULL to ns_client_dumpmessage() to get the log
    359  1.1  christos   message printed.
    360  1.1  christos 
    361  1.1  christos - Reject record sets too large to serve in DNS. ``933a8de056``
    362  1.1  christos 
    363  1.1  christos   When BIND was asked to store a record set whose total size exceeds
    364  1.1  christos   what fits in a DNS message, it would allocate memory and build the
    365  1.1  christos   structure, then fail later at response time. Such oversized record
    366  1.1  christos   sets are now rejected at the time of storage with an error, avoiding
    367  1.1  christos   wasted work on data that can never be served. :gl:`!11964`
    368  1.1  christos 
    369  1.1  christos 
    370