Home | History | Annotate | Line # | Download | only in notes
      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.29
     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 - Prevent excessive CPU use validating crafted DNSSEC responses.
     19  1.1  christos   :cve:`2026-19668`
     20  1.1  christos 
     21  1.1  christos   A malicious authoritative server could serve a securely delegated zone
     22  1.1  christos   whose DS and DNSKEY records carried many distinct key tags but no valid
     23  1.1  christos   match, forcing a validating resolver into excessive key-tag matching
     24  1.1  christos   and high CPU use for every query. This work is now bounded by the
     25  1.1  christos   per-query validation limit (:any:`max-validations-per-fetch`).
     26  1.1  christos 
     27  1.1  christos   ISC would like to thank Zuyao Xu and Xiang Li of the All-in-One
     28  1.1  christos   Security and Privacy Laboratory, Nankai University, for bringing this
     29  1.1  christos   vulnerability to our attention. :gl:`#5349`
     30  1.1  christos 
     31  1.1  christos - Require a TSIG on every message of incoming zone transfers.
     32  1.1  christos   :cve:`2026-19033`
     33  1.1  christos 
     34  1.1  christos   Previously, :iscman:`named` accepted TSIG-signed zone transfers in
     35  1.1  christos   which some messages were unsigned, and processed those messages
     36  1.1  christos   before the next signature could vouch for them. It now requires a
     37  1.1  christos   TSIG on every message of an incoming AXFR or IXFR; all modern
     38  1.1  christos   nameservers already sign every message, so no change is expected in
     39  1.1  christos   practice. :gl:`#6062`
     40  1.1  christos 
     41  1.1  christos - Prevent a DNSSEC downgrade of secure delegations via unrelated NSEC3
     42  1.1  christos   records. :cve:`2026-77119`
     43  1.1  christos 
     44  1.1  christos   A validating resolver could be tricked into treating a secure
     45  1.1  christos   delegation as unsigned and accepting forged answers for names beneath
     46  1.1  christos   it, if an attacker could inject responses to its queries. Such forged
     47  1.1  christos   proofs are now rejected. :gl:`#6234`
     48  1.1  christos 
     49  1.1  christos - Prevent forged DNSSEC-validated NXDOMAIN responses. :cve:`2026-19941`
     50  1.1  christos 
     51  1.1  christos   A validating resolver could accept a signed NSEC record from an
     52  1.1  christos   unrelated zone as proof that a wildcard did not exist. An on-path
     53  1.1  christos   attacker or malicious forwarder controlling a signed zone could
     54  1.1  christos   therefore forge an authenticated NXDOMAIN response for a name that
     55  1.1  christos   should resolve through a wildcard. The wildcard-denial and
     56  1.1  christos   name-nonexistence proofs are now required to be signed by the same
     57  1.1  christos   zone. :gl:`#6253`
     58  1.1  christos 
     59  1.1  christos - DNS64 with :any:`break-dnssec` could cause an assertion failure.
     60  1.1  christos   :cve:`2026-19666`
     61  1.1  christos 
     62  1.1  christos   When a :any:`dns64` statement is configured with ``break-dnssec yes;``
     63  1.1  christos   and its ``exclude`` list matches some but not all of the addresses in
     64  1.1  christos   an AAAA RRset, :iscman:`named` removes the excluded addresses from the
     65  1.1  christos   answer instead of synthesizing new ones. If the answer being filtered
     66  1.1  christos   had been cached together with a proof that the queried name did not
     67  1.1  christos   exist  which is what a wildcard match produces  :iscman:`named`
     68  1.1  christos   terminated with an assertion failure.
     69  1.1  christos 
     70  1.1  christos   Only recursive resolvers are affected, and only when
     71  1.1  christos   ``break-dnssec yes;`` is in use; the answer has to come from the
     72  1.1  christos   cache, so a server that is only authoritative cannot reach this.
     73  1.1  christos 
     74  1.1  christos   ISC would like to thank Rintaro Kawasugi for bringing this
     75  1.1  christos   vulnerability to our attention. :gl:`#6301`
     76  1.1  christos 
     77  1.1  christos - Reject oversized negative cache records. :cve:`2026-19667`
     78  1.1  christos 
     79  1.1  christos   A single crafted response from a server could make a resolver cache a
     80  1.1  christos   malformed negative entry and then terminate with an assertion failure
     81  1.1  christos   when reading it back. Only recursive resolvers are affected, on a
     82  1.1  christos   default configuration.
     83  1.1  christos 
     84  1.1  christos   ISC would like to thank Rintaro Kawasugi for bringing this
     85  1.1  christos   vulnerability to our attention. :gl:`#6302`
     86  1.1  christos 
     87  1.1  christos - Prevent resolver crash with cached DNSSEC proofs. :cve:`2026-19662`
     88  1.1  christos 
     89  1.1  christos   Under certain timing conditions, concurrent recursive queries could
     90  1.1  christos   cause :iscman:`named` to crash when cached DNSSEC NOQNAME proof data
     91  1.1  christos   was replaced while still in use. Cached proof data is now retained
     92  1.1  christos   until all queries using it have completed.
     93  1.1  christos 
     94  1.1  christos   ISC would like to thank Samy Medjahed/Ap4sh for bringing this
     95  1.1  christos   vulnerability to our attention. :gl:`#6333`
     96  1.1  christos 
     97  1.1  christos - Discard repeated SOA, CNAME, and DNAME records when parsing DNS
     98  1.1  christos   messages. :cve:`2026-75029`
     99  1.1  christos 
    100  1.1  christos   A DNS message could carry the same SOA, CNAME, or DNAME record many
    101  1.1  christos   times, and :iscman:`named` kept every copy while parsing it. With name
    102  1.1  christos   compression those copies took up far more memory internally than in
    103  1.1  christos   the message itself, and every later processing step had to handle all
    104  1.1  christos   of them. Only the first copy of such a record is now kept; identical
    105  1.1  christos   repeats are discarded. :gl:`#6335`
    106  1.1  christos 
    107  1.1  christos - Fix an unauthenticated crash on HTTPS using SIG(0). :cve:`2026-77692`
    108  1.1  christos 
    109  1.1  christos   A specifically crafted HTTPS query using SIG(0) as authentication
    110  1.1  christos   could crash :iscman:`named` if the client closed the connection before
    111  1.1  christos   :iscman:`named` actually verified the signature. This is now fixed.
    112  1.1  christos 
    113  1.1  christos   ISC would like to thank Vitaly Simonovich for bringing this
    114  1.1  christos   vulnerability to our attention. :gl:`#6343`
    115  1.1  christos 
    116  1.1  christos - Cached HTTPS/SVCB aliases could exhaust resolver CPU.
    117  1.1  christos   :cve:`2026-81736`
    118  1.1  christos 
    119  1.1  christos   A recursive resolver that had cached a large set of interlinked HTTPS
    120  1.1  christos   or SVCB records in alias form could be driven to do an excessive
    121  1.1  christos   amount of work assembling a single response, because it followed every
    122  1.1  christos   cached alias target when building the additional section. A client
    123  1.1  christos   permitted to use recursion, together with an attacker-controlled zone
    124  1.1  christos   used to plant the records, could repeat small queries to consume
    125  1.1  christos   enough CPU to delay or deny service to other clients. The amount of
    126  1.1  christos   additional processing done for one query is now bounded.
    127  1.1  christos 
    128  1.1  christos   ISC would like to thank Henrique Pereira for bringing this
    129  1.1  christos   vulnerability to our attention. :gl:`#6347`
    130  1.1  christos 
    131  1.1  christos - Prevent TKEY queries from terminating :iscman:`named` without global
    132  1.1  christos   options. :cve:`2026-76163`
    133  1.1  christos 
    134  1.1  christos   The :iscman:`named` process could terminate unexpectedly when a remote
    135  1.1  christos   client sent a TKEY query and the configuration did not include a
    136  1.1  christos   global :namedconf:ref:`options` statement. This has been fixed.
    137  1.1  christos 
    138  1.1  christos   ISC would like to thank Owais Lone (thesecguy) for bringing this
    139  1.1  christos   vulnerability to our attention. :gl:`#6357`
    140  1.1  christos 
    141  1.1  christos - Out-of-zone records in a zone database could be served as
    142  1.1  christos   authoritative. :cve:`2026-78301`
    143  1.1  christos 
    144  1.1  christos   When a zone database contained records for names outside the zone 
    145  1.1  christos   such as a delegation above the zone apex, left behind by a secondary
    146  1.1  christos   that had accepted out-of-zone data from its primary  the server could
    147  1.1  christos   treat them as authoritative and answer queries for names inside the
    148  1.1  christos   zone with that out-of-zone data instead of the zone's own. A server
    149  1.1  christos   that was also a resolver could follow such a delegation and cache the
    150  1.1  christos   answers of the server it named, affecting names outside the configured
    151  1.1  christos   zone. Zone database lookups are now confined to names at or below the
    152  1.1  christos   zone's origin.
    153  1.1  christos 
    154  1.1  christos   ISC would like to thank Henrique Pereira for bringing this
    155  1.1  christos   vulnerability to our attention. :gl:`#6361`
    156  1.1  christos 
    157  1.1  christos - Fix crash on wildcard answers carrying both NSEC and NSEC3 proofs.
    158  1.1  christos   :cve:`2026-80274`
    159  1.1  christos 
    160  1.1  christos   When a wildcard answer arrived with both NSEC and NSEC3 records at the
    161  1.1  christos   name proving that the queried name did not exist, the resolver could
    162  1.1  christos   pick different records when caching the answer and when retrieving the
    163  1.1  christos   proof, depending on the order in which the authoritative server sent
    164  1.1  christos   them. This could terminate :iscman:`named` with an assertion failure,
    165  1.1  christos   fail the query with SERVFAIL, or serve a denial record other than the
    166  1.1  christos   one that had been verified. The resolver now caches and serves the
    167  1.1  christos   same denial record it accepted when the answer was received.
    168  1.1  christos 
    169  1.1  christos   ISC would like to thank hythyt for bringing this vulnerability to our
    170  1.1  christos   attention. :gl:`#6369`
    171  1.1  christos 
    172  1.1  christos - Following HTTPS/SVCB aliases could leak resolver cache memory.
    173  1.1  christos   :cve:`2026-81563`
    174  1.1  christos 
    175  1.1  christos   When a recursive server answered a query for an HTTPS or SVCB record
    176  1.1  christos   in alias form and the alias target had more than 13 records, the
    177  1.1  christos   target records were pinned in the cache permanently instead of being
    178  1.1  christos   released once the answer was sent. A remote party who could make the
    179  1.1  christos   server follow such aliases to a steady stream of fresh names could
    180  1.1  christos   grow the cache beyond the configured :any:`max-cache-size` until the
    181  1.1  christos   server was unable to resolve unrelated names. The records are now
    182  1.1  christos   released correctly.
    183  1.1  christos 
    184  1.1  christos   ISC would like to thank Samy Medjahed/Ap4sh for bringing this
    185  1.1  christos   vulnerability to our attention. :gl:`#6374`
    186  1.1  christos 
    187  1.1  christos Feature Changes
    188  1.1  christos ~~~~~~~~~~~~~~~
    189  1.1  christos 
    190  1.1  christos - Reject oversized and malformed DNSKEY records up front.
    191  1.1  christos 
    192  1.1  christos   Oversized RSA key material in a DNSKEY record was only rejected after
    193  1.1  christos   it had been converted, allocating memory proportional to the record
    194  1.1  christos   size. Such records are now rejected before conversion, as are Ed25519
    195  1.1  christos   and Ed448 keys with trailing bytes that were previously silently
    196  1.1  christos   ignored. :gl:`#4537`
    197  1.1  christos 
    198  1.1  christos Bug Fixes
    199  1.1  christos ~~~~~~~~~
    200  1.1  christos 
    201  1.1  christos - Prevent a crash when using both :any:`dns64` and ``filter-a``.
    202  1.1  christos 
    203  1.1  christos   An assertion failure was possible when using both :any:`dns64` and the
    204  1.1  christos   ``filter-a`` plugin simultaneously; this has been fixed.
    205  1.1  christos   :gl:`#5979`
    206  1.1  christos 
    207  1.1  christos - Stop passing UDP client addresses to :any:`update-policy` ``external``
    208  1.1  christos   helpers.
    209  1.1  christos 
    210  1.1  christos   Dynamic update rules of type ``external`` delegate the authorization
    211  1.1  christos   decision to an external helper daemon. The client address field in
    212  1.1  christos   the helper request is only meant to carry TCP client addresses, which
    213  1.1  christos   cannot easily be spoofed, but UDP client addresses were passed as
    214  1.1  christos   well, so the helper could base its decision on an untrustworthy
    215  1.1  christos   address. For updates arriving over UDP, the helper request no longer
    216  1.1  christos   includes a client address. :gl:`#6061`
    217  1.1  christos 
    218  1.1  christos - Missing required NSEC3 for delegation not detected.
    219  1.1  christos 
    220  1.1  christos   A missing required NSEC3 record for an insecure delegation in a
    221  1.1  christos   non-opt-out range was not being detected. This has been fixed.
    222  1.1  christos   :gl:`#6063`
    223  1.1  christos 
    224  1.1  christos - Tighten EUI48 and EUI64 text parsing.
    225  1.1  christos 
    226  1.1  christos   Malformed EUI48 and EUI64 records could be accepted. This has been
    227  1.1  christos   fixed. :gl:`#6082`
    228  1.1  christos 
    229  1.1  christos - GeoIP ACL state could be stale or wrong after reload.
    230  1.1  christos 
    231  1.1  christos   Previously, :iscman:`named` cached GeoIP information after looking it
    232  1.1  christos   up, but the cached information was not invalidated when the GeoIP
    233  1.1  christos   database was reloaded, so it could continue to be used. Existing
    234  1.1  christos   cached GeoIP information is now invalidated as part of the reloading
    235  1.1  christos   process. :gl:`#6083`
    236  1.1  christos 
    237  1.1  christos - Honor DNSSEC policy key tag ranges.
    238  1.1  christos 
    239  1.1  christos   When a :any:`dnssec-policy` configured a non-default ``tag-range``,
    240  1.1  christos   :iscman:`dnssec-keygen` and :iscman:`dnssec-ksr` could accept
    241  1.1  christos   generated keys outside that range. Both tools now honor the configured
    242  1.1  christos   minimum and maximum key tags. :gl:`#6091`
    243  1.1  christos 
    244  1.1  christos - Fix a double free in :iscman:`mdig` when EDNS options are specified.
    245  1.1  christos 
    246  1.1  christos   The :iscman:`mdig` utility could terminate with a double free when
    247  1.1  christos   EDNS options were specified on the command line. This has been fixed.
    248  1.1  christos   :gl:`#6095`
    249  1.1  christos 
    250  1.1  christos - Fix a crash when an IXFR falls back to AXFR with updates still
    251  1.1  christos   pending.
    252  1.1  christos 
    253  1.1  christos   When a secondary zone received an incremental transfer (IXFR) and the
    254  1.1  christos   primary then caused :iscman:`named` to fall back to a full transfer
    255  1.1  christos   (AXFR) while some of the already-received incremental changes were
    256  1.1  christos   still waiting to be applied, :iscman:`named` could later crash when
    257  1.1  christos   that transfer finished. The pending changes are now discarded
    258  1.1  christos   correctly before the AXFR retry. :gl:`#6114`
    259  1.1  christos 
    260  1.1  christos - Fix DS requests to parental agents over TLS.
    261  1.1  christos 
    262  1.1  christos   TLS configuration for parental agents was being ignored when sending
    263  1.1  christos   DS requests. This has been fixed. :gl:`#6135`
    264  1.1  christos 
    265  1.1  christos - Fix the :option:`rndc-confgen -q` (quiet) option.
    266  1.1  christos 
    267  1.1  christos   The command-line parsing in :iscman:`rndc-confgen` was broken, so
    268  1.1  christos   :option:`rndc-confgen -q` did not work. This has been fixed.
    269  1.1  christos   :gl:`#6187`
    270  1.1  christos 
    271  1.1  christos - Enforce query ACLs for redirect zones and searched DLZs.
    272  1.1  christos 
    273  1.1  christos   Queries answered from redirect zones or searched DLZ databases did not
    274  1.1  christos   consistently honor :any:`allow-query` and :any:`allow-query-on`,
    275  1.1  christos   potentially exposing restricted DNS data to excluded clients or
    276  1.1  christos   through excluded listening addresses. These ACLs are now enforced
    277  1.1  christos   before redirect or DLZ data is returned. :gl:`#6251` :gl:`#6252`
    278  1.1  christos 
    279  1.1  christos - Check ``asnum`` validity in GeoIP ACLs.
    280  1.1  christos 
    281  1.1  christos   The validity of autonomous system (AS) numbers is now checked at
    282  1.1  christos   configuration time when parsing GeoIP ACLs that use ``asnum``
    283  1.1  christos   elements.
    284  1.1  christos 
    285  1.1  christos   ``asnum`` values start with an optional case-insensitive ``AS``
    286  1.1  christos   prefix, followed only by decimal digits, with no spaces or other
    287  1.1  christos   extraneous characters. The value represented cannot exceed 2^32.
    288  1.1  christos   :gl:`#6255`
    289  1.1  christos 
    290  1.1  christos - Fix a crash on :any:`remote-servers` lists that reference themselves.
    291  1.1  christos 
    292  1.1  christos   Since 9.21.16 and 9.20.17, a :any:`remote-servers`, :any:`primaries`,
    293  1.1  christos   ``masters``, or :any:`parental-agents` list that referenced itself,
    294  1.1  christos   directly or through another list, made :iscman:`named` crash on
    295  1.1  christos   startup or reconfiguration. Such references are again skipped and the
    296  1.1  christos   remaining entries in the list are used, as in earlier versions.
    297  1.1  christos   :gl:`#6287`
    298  1.1  christos 
    299  1.1  christos - A record from outside a response policy zone could crash
    300  1.1  christos   :iscman:`named`.
    301  1.1  christos 
    302  1.1  christos   A response policy zone transferred from a primary can contain a record
    303  1.1  christos   whose name lies outside the zone. Such a record could terminate
    304  1.1  christos   :iscman:`named` with an assertion failure, both when it arrived and
    305  1.1  christos   again at every startup afterwards, because a secondary keeps it in its
    306  1.1  christos   own copy of the zone. Records like this are now rejected and logged;
    307  1.1  christos   previously one could also silently create a policy entry for an
    308  1.1  christos   unrelated name. :gl:`#6304`
    309  1.1  christos 
    310  1.1  christos - Invalid :any:`key-store` configuration could abort the DNSSEC tools.
    311  1.1  christos 
    312  1.1  christos   An invalid :any:`key-store` block named ``key-directory`` in a
    313  1.1  christos   configuration file could abort the DNSSEC tools. This has been fixed.
    314  1.1  christos   :gl:`#6313`
    315  1.1  christos 
    316  1.1  christos - NSEC signature set could bypass the secure-delegation check.
    317  1.1  christos 
    318  1.1  christos   When proving that a delegation was insecure, the validator bounded an
    319  1.1  christos   NSEC record's authority by the signer of whichever RRSIG happened to
    320  1.1  christos   come first in the record's signature set, rather than the signature
    321  1.1  christos   that actually verified. A grandparent NSEC padded with an extra,
    322  1.1  christos   unverifiable signature could therefore pass the check that kept such
    323  1.1  christos   proofs from reaching below a signed child zone. The validator now
    324  1.1  christos   requires every signature on the NSEC to name the same signer and
    325  1.1  christos   refuses proofs whose signature set is malformed or larger than
    326  1.1  christos   :any:`max-validations-per-fetch` allows. :gl:`#6321`
    327  1.1  christos 
    328  1.1  christos - Fix a possible :iscman:`nsupdate` issue when using GSS-TSIG.
    329  1.1  christos 
    330  1.1  christos   The :iscman:`nsupdate` process could terminate unexpectedly when using
    331  1.1  christos   the GSS-TSIG mode executed with the :option:`nsupdate -g` option. This
    332  1.1  christos   has been fixed. :gl:`#6325`
    333  1.1  christos 
    334  1.1  christos - Fix a crash with a single-element ``geoip`` sortlist.
    335  1.1  christos 
    336  1.1  christos   If :iscman:`named` was configured with a single-element
    337  1.1  christos   :any:`sortlist` containing a ``geoip`` ACL element, any matching query
    338  1.1  christos   triggered an assertion failure. This has been fixed. :gl:`#6342`
    339  1.1  christos 
    340  1.1  christos - Prevent out-of-bailiwick CNAMEs from evicting cached records.
    341  1.1  christos 
    342  1.1  christos   A recursive resolver could remove valid cached records when a DNS
    343  1.1  christos   response contained an out-of-bailiwick CNAME with the same owner name.
    344  1.1  christos   Out-of-bailiwick data is now discarded before it can modify the cache.
    345  1.1  christos   :gl:`#6345`
    346  1.1  christos 
    347  1.1  christos - Restore periodic cleanup of stale resolver address data.
    348  1.1  christos 
    349  1.1  christos   Stale resolver address data could remain cached until memory pressure
    350  1.1  christos   or an explicit flush. The cleanup interval has been corrected, so
    351  1.1  christos   stale entries are removed periodically again. :gl:`#6346`
    352  1.1  christos 
    353  1.1  christos - Fix :iscman:`named-checkconf`/:iscman:`named` crash with malformed
    354  1.1  christos   key name.
    355  1.1  christos 
    356  1.1  christos   When a primary/remote-server key name was malformed,
    357  1.1  christos   :iscman:`named-checkconf` and :iscman:`named` were both crashing
    358  1.1  christos   (after warning about the invalid key name). This is now fixed.
    359  1.1  christos   :gl:`#6362`
    360  1.1  christos 
    361  1.1  christos - Prevent resolver crashes while processing DNS over TCP.
    362  1.1  christos 
    363  1.1  christos   Recursive resolvers could terminate with an assertion failure while
    364  1.1  christos   processing DNS responses over TCP under sustained traffic. The failure
    365  1.1  christos   was observed on resolvers configured globally with ``forward only;``,
    366  1.1  christos   but the same transport path is also used by iterative resolution.
    367  1.1  christos   This has been fixed. :gl:`!12537`
    368