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