notes-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 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 :option:`rndc modzone` behavior for a zone in named.conf.
145 1.1 christos
146 1.1 christos If a zone was present in the configuration file and not originally
147 1.1 christos added by :option:`rndc addzone`, :option:`rndc modzone` for that zone would succeed
148 1.1 christos once but subsequent :option:`rndc modzone` attempts would fail. This has been
149 1.1 christos fixed. :gl:`#5826`
150 1.1 christos
151 1.1 christos - Fix zone verification of NSEC3 signed zones.
152 1.1 christos
153 1.1 christos Previously, when computing the compressed bitmap during verification
154 1.1 christos of an NSEC3-signed zone, an undersized buffer was used that resulted
155 1.1 christos in an out-of-bounds write if there were too many active windows in the
156 1.1 christos bitmap. This impacted the mirror zones which are NSEC3-signed,
157 1.1 christos :iscman:`dnssec-signzone` and :iscman:`dnssec-verify`. This has been fixed.
158 1.1 christos :gl:`#5834`
159 1.1 christos
160 1.1 christos - Prevent a crash when using both :any:`dns64` and :any:`filter-aaaa`.
161 1.1 christos
162 1.1 christos An assertion failure could be triggered if both :any:`dns64` and the
163 1.1 christos :any:`filter-aaaa` plugin were in use simultaneously. This happened if the
164 1.1 christos plugin triggered a second recursion process, which then attempted to
165 1.1 christos store DNS64 state information in a pointer that had already been set
166 1.1 christos by the original recursion process. This has been fixed. :gl:`#5854`
167 1.1 christos
168 1.1 christos - Fixed an assertion failure when processing catalog zones.
169 1.1 christos
170 1.1 christos If a TXT record containing an invalid name TSIG key name was found
171 1.1 christos when processing a catalog zone member's primaries definition,
172 1.1 christos ``dns_name_free`` was incorrectly called, triggering an assertion. This has
173 1.1 christos been fixed. :gl:`#5858`
174 1.1 christos
175 1.1 christos - Prevent malicious DNSSEC zones from exhausting validator CPU.
176 1.1 christos
177 1.1 christos A DNSSEC-signed zone could publish a DNSKEY with an unusually large
178 1.1 christos RSA public exponent and force any validator resolving names in that
179 1.1 christos zone to spend disproportionate CPU verifying signatures. The
180 1.1 christos validator now rejects such DNSKEYs, matching the limit already applied
181 1.1 christos to keys read from files or HSMs. :gl:`#5881`
182 1.1 christos
183 1.1 christos - Fix :iscman:`rndc-confgen` aborting on HMAC-SHA-384/512 keys above 512 bits.
184 1.1 christos
185 1.1 christos :iscman:`rndc-confgen` (with either ``-A hmac-sha384`` or
186 1.1 christos ``-A hmac-sha512``) previously documented a ``-b``
187 1.1 christos range of 1..1024, but any value above 512 aborted on hardened builds
188 1.1 christos instead of producing a key. The full advertised range now works.
189 1.1 christos :gl:`#5903`
190 1.1 christos
191 1.1 christos - Prevent crafted queries from degrading RRL performance.
192 1.1 christos
193 1.1 christos With response rate limiting enabled, an attacker sending queries from
194 1.1 christos many spoofed source addresses could steer entries into the same slot
195 1.1 christos of the internal rate-limit table and slow down query processing on the
196 1.1 christos affected server. The table now uses a per-process keyed hash so the
197 1.1 christos placement of entries cannot be predicted or influenced from the
198 1.1 christos network. :gl:`#5906`
199 1.1 christos
200 1.1 christos - Prevent rare :iscman:`named` crash when notifies are cancelled.
201 1.1 christos
202 1.1 christos Under heavy load, :iscman:`named` could occasionally crash when a queued
203 1.1 christos outbound notify or zone refresh was cancelled at the moment it was
204 1.1 christos being sent for example, while a zone was being reloaded or removed.
205 1.1 christos The race that caused the crash is now prevented. :gl:`#5915`
206 1.1 christos
207 1.1 christos - Stop :iscman:`delv` from aborting on a malformed query name.
208 1.1 christos
209 1.1 christos :iscman:`delv` previously aborted with SIGABRT instead of exiting cleanly when given a query
210 1.1 christos name that failed wire-format conversion (e.g. a label longer than 63
211 1.1 christos octets). After this change :iscman:`delv` prints the parse error and exits with
212 1.1 christos a normal failure code. :gl:`#5916`
213 1.1 christos
214 1.1 christos - Fix a crash when reconfiguring while an NTA is being rechecked.
215 1.1 christos
216 1.1 christos Previously, if :iscman:`named` was reconfigured or shut down while a negative trust anchor
217 1.1 christos was being rechecked against authoritative servers, the in-flight
218 1.1 christos recheck could outlive the view that owned it and cause :iscman:`named` to
219 1.1 christos crash. This has been fixed. :gl:`#5938`
220 1.1 christos
221 1.1 christos - Fix a bug in :any:`allow-query`/:any:`allow-transfer` catalog zone custom
222 1.1 christos properties.
223 1.1 christos
224 1.1 christos The :iscman:`named` process could terminate unexpectedly when
225 1.1 christos processing a catalog zone with an invalid :any:`allow-query` or
226 1.1 christos :any:`allow-transfer` custom property (i.e. having a non-APL type)
227 1.1 christos coexisting with the valid property. This has been fixed. :gl:`#5941`
228 1.1 christos
229 1.1 christos - Fix a memory leak issue in catalog zones.
230 1.1 christos
231 1.1 christos The :iscman:`named` process could leak small amounts of memory when
232 1.1 christos processing a catalog zone entry which had defined custom primary
233 1.1 christos servers with TSIG keys, if both the regular ``primaries`` custom
234 1.1 christos property syntax and the legacy alternative syntax (``masters``) were used at the
235 1.1 christos same time. This has been fixed. :gl:`#5943`
236 1.1 christos
237 1.1 christos - Fix suppressed missing-glue check in :iscman:`named-checkzone`.
238 1.1 christos
239 1.1 christos :iscman:`named-checkzone` and :option:`named-checkconf -z` silently
240 1.1 christos skipped the missing-glue check for any NS name that had already
241 1.1 christos triggered an extra-AAAA-glue warning, so zones missing required A glue
242 1.1 christos could pass validation and be deployed with broken delegations.
243 1.1 christos :gl:`!11899`
244 1.1 christos
245 1.1 christos - Implement seamless outgoing TCP connection reuse.
246 1.1 christos
247 1.1 christos The resolver can and will reuse outgoing TCP connections to the same
248 1.1 christos host, as recommended by :rfc:`7766`. This prevents a whole class of
249 1.1 christos attacks that abuse the fact that establishing a TCP connection is
250 1.1 christos expensive and it is fairly easy to deplete the outgoing TCP ports by
251 1.1 christos putting them into ``TIME_WAIT`` state.
252 1.1 christos
253 1.1 christos The number of pipelined queries per connection is capped at 256 to
254 1.1 christos limit the impact of a connection drop. :gl:`!11845`
255 1.1 christos
256 1.1 christos - Reject record sets too large to serve in DNS.
257 1.1 christos
258 1.1 christos When BIND was asked to store a record set whose total size exceeded
259 1.1 christos what fit in a DNS message, it would allocate memory and build the
260 1.1 christos structure, then fail later at response time. Such oversized record
261 1.1 christos sets are now rejected at the time of storage with an error, avoiding
262 1.1 christos wasted work on data that can never be served. :gl:`!11963`
263 1.1 christos
264 1.1 christos
265