Home | History | Annotate | Line # | Download | only in changelog
      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 BIND 9.20.29
     13 ------------
     14 
     15 Security Fixes
     16 ~~~~~~~~~~~~~~
     17 
     18 - [CVE-2026-19668] Prevent excessive CPU use validating crafted DNSSEC
     19   responses. ``a0a61dba9e``
     20 
     21   A malicious authoritative server could serve a securely delegated zone
     22   whose DS and DNSKEY records carry many distinct key tags but no valid
     23   match, forcing a validating resolver into excessive key-tag matching
     24   and high CPU use for every query. BIND now bounds this work with the
     25   per-query validation limit (max-validations-per-fetch). :gl:`#5349`
     26 
     27 - [CVE-2026-19033] Require a TSIG on every message of incoming zone
     28   transfers. ``9404cd2b8c``
     29 
     30   BIND 9 used to accept TSIG-signed zone transfers in which some
     31   messages were unsigned, and processed those messages before the next
     32   signature could vouch for them. It now requires a TSIG on every
     33   message of an incoming AXFR or IXFR; all modern nameserver already
     34   sign every message, so no change is expected in practice. :gl:`#6062`
     35 
     36 - [CVE-2026-77119] Prevent a DNSSEC downgrade of secure delegations via
     37   unrelated NSEC3. ``3bed9c8e9e``
     38 
     39   A validating resolver could be tricked into treating a secure
     40   delegation as unsigned and accepting forged answers for names beneath
     41   it, if an attacker could inject responses to its queries. Such forged
     42   proofs are now rejected. :gl:`#6234`
     43 
     44 - [CVE-2026-19941] Prevent forged DNSSEC-validated NXDOMAIN responses.
     45   ``a36bf58daf``
     46 
     47   A validating resolver could accept a signed NSEC record from an
     48   unrelated zone as proof that a wildcard did not exist. An on-path
     49   attacker or malicious forwarder controlling a signed zone could
     50   therefore forge an authenticated NXDOMAIN response for a name that
     51   should resolve through a wildcard. BIND now requires the
     52   wildcard-denial and name-nonexistence proofs to be signed by the same
     53   zone. :gl:`#6253`
     54 
     55 - [CVE-2026-19666] DNS64 with break-dnssec could cause an assertion
     56   failure. ``4cec4965c4``
     57 
     58   When a "dns64" statement is configured with "break-dnssec yes" and its
     59   "exclude" list matches some but not all of the addresses in an AAAA
     60   RRset, named removes the excluded addresses from the answer instead of
     61   synthesizing new ones. If the answer being filtered had been cached
     62   together with a proof that the queried name does not exist -- which is
     63   what a wildcard match produces -- named terminated with an assertion
     64   failure.
     65 
     66   Only recursive resolvers are affected, and only when "break-dnssec
     67   yes" is in use; the answer has to come from the cache, so a server
     68   that is only authoritative cannot reach this. :gl:`#6301`
     69 
     70 - [CVE-2026-19667] Reject negative cache records that do not fit in a
     71   dns_rdata_t. ``dbf08c8581``
     72 
     73   A single crafted response from a server could make a resolver cache a
     74   malformed negative entry and then terminate with an assertion failure
     75   when reading it back. Only recursive resolvers are affected, on a
     76   default configuration. :gl:`#6302`
     77 
     78 - [CVE-2026-19662] Prevent resolver crash with cached DNSSEC proofs.
     79   ``c884cc1ba0``
     80 
     81   Under certain timing conditions, concurrent recursive queries could
     82   cause named to crash when cached DNSSEC NOQNAME proof data was
     83   replaced while still in use. Cached proof data is now retained until
     84   all queries using it have completed. :gl:`#6333`
     85 
     86 - [CVE-2026-75029] Discard repeated SOA, CNAME, and DNAME records when
     87   parsing DNS messages. ``0d630758c2``
     88 
     89   A DNS message could carry the same SOA, CNAME, or DNAME record many
     90   times, and named kept every copy while parsing it. With name
     91   compression those copies took up far more memory internally than in
     92   the message itself, and every later processing step had to handle all
     93   of them. named now keeps the first copy of such a record and discards
     94   identical repeats. :gl:`#6335`
     95 
     96 - [CVE-2026-77692] Fix an unauthenticated crash on HTTPS using SIG(0)
     97   ``5a24401c5c``
     98 
     99   A specifically crafted HTTPS query using SIG(0) as authentication
    100   could crash named if the client closes the connection before named
    101   actually verifies the signature. This is now fixed. :gl:`#6343`
    102 
    103 - [CVE-2026-81736] Cached HTTPS/SVCB aliases could exhaust resolver CPU.
    104   ``20bbb1639a``
    105 
    106   A recursive resolver that had cached a large set of interlinked HTTPS
    107   or SVCB records in alias form could be driven to do an excessive
    108   amount of work assembling a single response, because it followed every
    109   cached alias target when building the additional section. A client
    110   permitted to use recursion, together with an attacker-controlled zone
    111   used to plant the records, could repeat small queries to consume
    112   enough CPU to delay or deny service to other clients. The amount of
    113   additional processing done for one query is now bounded. :gl:`#6347`
    114 
    115 - [CVE-2026-76163] Prevent TKEY queries from terminating named without
    116   global options. ``7645138538``
    117 
    118   named could terminate unexpectedly when a remote client sent a TKEY
    119   query if the configuration did not include a global options statement.
    120   This has been fixed.
    121 
    122   ISC thanks Owais Lone (thesecguy) for reporting the issue. :gl:`#6357`
    123 
    124 - [CVE-2026-78301] Out-of-zone records in a zone database could be
    125   served as authoritative. ``72a10c3a0b``
    126 
    127   When a zone database contained records for names outside the zone 
    128   such as a delegation above the zone apex, left behind by a secondary
    129   that had accepted out-of-zone data from its primary  the server could
    130   treat them as authoritative and answer queries for names inside the
    131   zone with that out-of-zone data instead of the zone's own. A server
    132   that was also a resolver could follow such a delegation and cache the
    133   answers of the server it named, affecting names outside the configured
    134   zone. Zone database lookups are now confined to names at or below the
    135   zone's origin.
    136 
    137   ISC would like to thank Henrique Pereira for reporting the issue.
    138   :gl:`#6361`
    139 
    140 - [CVE-2026-80274] Crash on wildcard answers carrying both NSEC and
    141   NSEC3 proofs. ``0e44451b1a``
    142 
    143   When a wildcard answer arrived with both NSEC and NSEC3 records at the
    144   name proving that the queried name does not exist, the resolver could
    145   pick different records when caching the answer and when retrieving the
    146   proof, depending on the order in which the authoritative server sent
    147   them. This could terminate named with an assertion failure, fail the
    148   query with SERVFAIL, or serve a denial record other than the one that
    149   had been verified. The resolver now caches and serves the same denial
    150   record it accepted when the answer was received.
    151 
    152   ISC would like to thank hythyt for reporting the issue. :gl:`#6369`
    153 
    154 - [CVE-2026-81563] Following HTTPS/SVCB aliases could leak resolver
    155   cache memory. ``3162df369e``
    156 
    157   When a recursive server answered a query for an HTTPS or SVCB record
    158   in alias form and the alias target had more than 13 records, the
    159   target records were pinned in the cache permanently instead of being
    160   released once the answer was sent. A remote party who could make the
    161   server follow such aliases to a steady stream of fresh names could
    162   grow the cache beyond the configured max-cache-size until the server
    163   was unable to resolve unrelated names. The records are now released
    164   correctly.
    165 
    166   ISC would like to thank Samy Medjahed/Ap4sh for reporting the issue.
    167   :gl:`#6374`
    168 
    169 New Features
    170 ~~~~~~~~~~~~
    171 
    172 - Add an agent skill for the isc_job/isc_async/isc_work APIs.
    173   ``fe32990b06``
    174 
    175   Documents when to use isc_job_run(), isc_async_run() or
    176   isc_work_enqueue(), and the contract each one imposes. No functional
    177   change. :gl:`!12561`
    178 
    179 Removed Features
    180 ~~~~~~~~~~~~~~~~
    181 
    182 - Remove unused closest encloser proof caching. ``abd8b5bfd8``
    183 
    184   BIND used to cache an NSEC3 closest encloser proof alongside positive
    185   wildcard answers so that a resolver could re-send it when answering
    186   from its cache. That stopped being used in BIND 9.9 (2011), when
    187   positive wildcard responses were changed to omit that NSEC3 record 
    188   RFC 5155 requires only the next closer name proof  and the closest
    189   encloser came to be  derived during validation instead. The caching
    190   code has been unreachable ever since, so this removes it with no
    191   change in behaviour. :gl:`#5803` :gl:`!12660`
    192 
    193 Feature Changes
    194 ~~~~~~~~~~~~~~~
    195 
    196 - Reject oversized and malformed DNSKEY records up front. ``6c22109924``
    197 
    198   Oversized RSA key material in a DNSKEY record was only rejected after
    199   it had been converted, allocating memory proportional to the record
    200   size. Such records are now rejected before conversion, as are Ed25519
    201   and Ed448 keys with trailing bytes that were previously silently
    202   ignored. :gl:`#4537` :gl:`!12560`
    203 
    204 Bug Fixes
    205 ~~~~~~~~~
    206 
    207 - Prevent a crash when using both dns64 and filter-a. ``bce5d10d18``
    208 
    209   An assertion failure was possible when using both `dns64` and the
    210   `filter-a` plugin simultaneously; this has been fixed. :gl:`#5979`
    211   :gl:`!12663`
    212 
    213 - Fix update-policy grant external address passing. ``b1e955c326``
    214 
    215   Only TCP client addresses are supposed to be passed to an `external`
    216   handler for the associated `update-policy` rule, but UDP client
    217   addresses were also being passed.  This could have caused the external
    218   handler to return a result it otherwise wouldn't. This has been fixed.
    219   :gl:`#6061` :gl:`!12555`
    220 
    221 - Missing required NSEC3 for delegation not detected. ``e84ed2e9d7``
    222 
    223   A missing required NSEC3 record for an insecure delegation in a non
    224   OPTOUT range was not being detected.  This has been fixed. :gl:`#6063`
    225   :gl:`!12611`
    226 
    227 - Tighten EUI48 and EUI48 text parsing. ``ff50f2cdf1``
    228 
    229   Malformed EUI48 and EUI64 records could be accepted.  This has been
    230   fixed. :gl:`#6082` :gl:`!12521`
    231 
    232 - GeoIP ACL state can be stale or wrong after reload. ``63baf425b3``
    233 
    234   `named` caches GeoIP information after looking it up, but the cached
    235   information was not invalidated when the GeoIP database was reloaded,
    236   so it could continue to be used.  We now invalidate existing cached
    237   GeoIP information as part of the reloading process. :gl:`#6083`
    238   :gl:`!12662`
    239 
    240 - Honor DNSSEC policy key tag ranges. ``b82e5834b7``
    241 
    242   When a DNSSEC policy configured a non-default tag-range, dnssec-keygen
    243   and dnssec-ksr could accept generated keys outside that range. Both
    244   tools now honor the configured minimum and maximum key tags.
    245   :gl:`#6091` :gl:`!12549`
    246 
    247 - Fix double free in mdig when EDNS options are specified.
    248   ``af5bd0b0ff``
    249 
    250   When the default_query is cloned the EDNS options need to be cloned
    251   rather than the pointer copied.  The old behaviour results in a double
    252   free of the options.  This has been fixed. :gl:`#6095` :gl:`!12661`
    253 
    254 - Fix a crash when an IXFR falls back to AXFR with updates still
    255   pending. ``e34062bc7e``
    256 
    257   When a secondary zone received an incremental transfer (IXFR) and the
    258   primary then caused named to fall back to a full transfer (AXFR) while
    259   some of the already-received incremental changes were still waiting to
    260   be applied, named could later crash when that transfer finished. The
    261   pending changes are now discarded correctly before the AXFR retry.
    262   :gl:`#6114` :gl:`!12624`
    263 
    264 - Fix DS requests to parental agents over TLS. ``55830d30f6``
    265 
    266   TLS configuration for parental agents was being ignored when sending
    267   DS requests. This has been fixed. :gl:`#6135` :gl:`!12613`
    268 
    269 - Fix a crash when resolving names below a cached DNAME. ``b94e940f52``
    270 
    271   A recursive resolver could crash when it answered a query for a name
    272   beneath a cached DNAME while that same DNAME record was concurrently
    273   refreshed or evicted from the cache. :gl:`#6182` :gl:`!12593`
    274 
    275 - Rndc-confgen `-q` (quiet) option is documented but doesn't work.
    276   ``7e4a7ca1a7``
    277 
    278   The command line parsing in rndc-confgen was broken so  `rndc-confgen
    279   -q` did not work.  This has been fixed. :gl:`#6187` :gl:`!12575`
    280 
    281 - Enforce query ACLs for redirect zones and searched DLZs.
    282   ``bc69876b2e``
    283 
    284   Queries answered from redirect zones or searched DLZ databases did not
    285   consistently honor `allow-query` and `allow-query-on`, potentially
    286   exposing restricted DNS data to excluded clients or through excluded
    287   listening addresses. These ACLs are now enforced before redirect or
    288   DLZ data is returned. :gl:`#6251`, #6252 :gl:`!12646`
    289 
    290 - Check "asnum" validity in GeoIP ACLs. ``28c2bfdc7b``
    291 
    292   We now check the validity of autonomous system (AS) numbers when
    293   parsing GeoIP ACLs that use `asnum` elements at configuration time.
    294 
    295   `asnum` values start with an optional case-insensitive "AS" prefix,
    296   followed only by decimal digits, with no spaces or other extraneous
    297   characters. The value represented cannot exceed 2^32. :gl:`#6255`
    298   :gl:`!12511`
    299 
    300 - Prevent crashes while reporting DNSSEC signing statistics.
    301   ``c190514f0a``
    302 
    303   Servers with zone-statistics full could terminate while reporting
    304   DNSSEC signing statistics for a zone tracking adding more than four
    305   signing keys. :gl:`#6256` :gl:`!12674`
    306 
    307 - Fix various nits in the netmgr code. ``c28cdad51b``
    308 
    309   The MR consists of couple of small fixes and uncaught errors in the
    310   Network Manager. :gl:`#6257` :gl:`!12576`
    311 
    312 - Fix a crash on remote-servers lists that reference themselves.
    313   ``aaae614f9d``
    314 
    315   Since 9.21.16 and 9.20.17, a remote-servers, primaries, masters, or
    316   parental-agents list that referenced itself, directly or through
    317   another list, made named crash on startup or reconfiguration. Such
    318   references are again skipped and the remaining entries in the list are
    319   used, as in earlier versions. :gl:`#6287` :gl:`!12604`
    320 
    321 - A record from outside a response policy zone could stop named.
    322   ``d135513b37``
    323 
    324   A response policy zone transferred from a primary can contain a record
    325   whose name lies outside the zone. Such a record could stop named, both
    326   when it arrived and again at every startup afterwards, because a
    327   secondary keeps it in its own copy of the zone. Records like this are
    328   now rejected and logged; previously one could also silently create a
    329   policy entry for an unrelated name. :gl:`#6304` :gl:`!12543`
    330 
    331 - "rndc flushtree ." failed to flush the cache. ``96e8b585ed``
    332 
    333   `rndc flushtree` flushes cache data below a specified name. If the
    334   name specified is the DNS root, it should fully empty the cache, the
    335   same as `rndc flush`.  However, there was a bug causing the command,
    336   in that case, to have no effect on the cache at all; this has been
    337   fixed. :gl:`#6308` :gl:`!12582`
    338 
    339 - Invalid key-store configuration could abort the DNSSEC tools.
    340   ``1d796ab072``
    341 
    342   Invalid configured key-stores named "key-directory" in configuration
    343   files could abort the DNSSEC tools. This has been fixed. :gl:`#6313`
    344   :gl:`!12653`
    345 
    346 - NSEC signature set could bypass the secure-delegation check.
    347   ``c966177f6c``
    348 
    349   When proving that a delegation is insecure, the validator bounded an
    350   NSEC record's authority by the signer of whichever RRSIG happened to
    351   come first in the record's signature set, rather than the signature
    352   that actually verified. A grandparent NSEC padded with an extra,
    353   unverifiable signature could therefore pass the check that keeps such
    354   proofs from reaching below a signed child zone. The validator now
    355   requires every signature on the NSEC to name the same signer and
    356   refuses proofs whose signature set is malformed or larger than
    357   max-validations-per-fetch allows. :gl:`#6321`
    358 
    359 - Fix a possible nsupdate issue when using GSS-TSIG. ``4ddcab2d3c``
    360 
    361   The :iscman:`nsupdate` process could terminate unexpectedly when using
    362   the GSS-TSIG mode executed with the :option:`nsupdate -g` option. This
    363   has been fixed. :gl:`#6325` :gl:`!12588`
    364 
    365 - Fix isccc_alist_define error paths. ``af1349552a``
    366 
    367   If there is an out of memory error in isccc_alist_define a memory leak
    368   (the sexpr holding the key name) or a double free (value) could occur.
    369   This has been fixed. :gl:`#6329` :gl:`!12636`
    370 
    371 - Check for empty 'endpoints' list. ``23f58af443``
    372 
    373   Configuring an `http` block with `endpoints {};` previously caused a
    374   crash in `named`. This is now rejected earlier by the configuration
    375   check. :gl:`#6330` :gl:`!12552`
    376 
    377 - Named could crash with a single-element geoip sortlist. ``0e996a4d3b``
    378 
    379   If `named` was configured with a single-element sortlist containing a
    380   `geoip` ACL element, any matching query triggered an assertion
    381   failure. This has been fixed. :gl:`#6342` :gl:`!12583`
    382 
    383 - Prevent out-of-bailiwick CNAMEs from evicting cached records.
    384   ``cdedd4acd5``
    385 
    386   A recursive resolver could remove valid cached records when a DNS
    387   response contained an out-of-bailiwick CNAME with the same owner name.
    388   Out-of-bailiwick data is now discarded before it can modify the cache.
    389   :gl:`#6345` :gl:`!12651`
    390 
    391 - Restore periodic cleanup of stale resolver address data.
    392   ``356f4013f8``
    393 
    394   Stale resolver address data could remain cached until memory pressure
    395   or an explicit flush. Correct the cleanup interval so it is removed
    396   periodically. :gl:`#6346` :gl:`!12589`
    397 
    398 - Fix named-checkconf/named crash with malformed key name.
    399   ``9f218f6aaf``
    400 
    401   When a primary/remote-server key name was malformed, named-checkconf
    402   and named were both crashing (after warning about the invalid key
    403   name). This is now fixed. :gl:`#6362` :gl:`!12639`
    404 
    405 - Fix -Wformat-truncation warning in totext_in_wks() ``f97c2bea40``
    406 
    407   BIND 9 failed to build with GCC 16 at -O3: rendering a WKS record as
    408   text triggered a -Wformat-truncation error, which is fatal in
    409   developer builds. The port number is now printed with a 16-bit format
    410   specifier, so the compiler can see it always fits the output buffer.
    411   :gl:`!12542`
    412 
    413 - Fix off-by-one errors caused by magic hardcoded values. ``726c6cb795``
    414 
    415   Fix off-by-one comparinson errors: "named -p http=" dropped the first
    416   digit of the given port (for example, "http=8080" selected port 80)
    417   and now uses the port as given, and "named-rrchecker -C" compared only
    418   part of the "CLASS" prefix when filtering generic class names, which
    419   was harmless in practice but is now corrected. :gl:`!12616`
    420 
    421 - Hmac_verify() now accepts truncated HMACs only when requested.
    422   ``c81b111496``
    423 
    424   The hmac_verify() function incorrectly compares only up to
    425   'sig->length' bytes, but the signature and its length should not be
    426   trusted, e.g. in case if it comes from a user query.
    427 
    428   Don't accept signatures which length isn't equal to the expected
    429   calculated HMAC length unless it is explicitly requested by the
    430   caller, e.g. for truncated TSIG [1] support.
    431 
    432   [1] https://datatracker.ietf.org/doc/html/rfc8945#name-tsig-truncation
    433   -policy :gl:`!12629`
    434 
    435 - Prevent resolver crashes while processing DNS over TCP. ``81b3b6d89f``
    436 
    437   Recursive resolvers could terminate with an assertion failure while
    438   processing DNS responses over TCP under sustained traffic. The failure
    439   was observed on resolvers configured globally with forward only; the
    440   same transport path is also used by iterative resolution.  This has
    441   been fixed. :gl:`!12537`
    442 
    443 
    444