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