changelog-9.20.23.rst revision 1.1 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