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.26
     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 - Correct verification of NSEC3 signer name. :cve:`2026-10723`
     19  1.1  christos 
     20  1.1  christos   Previously, :iscman:`named` accepted child-zone NSEC3 records where
     21  1.1  christos   the first label equaled the hash of the parent zone as valid
     22  1.1  christos   parent-zone closest encloser proofs. This has been fixed.
     23  1.1  christos 
     24  1.1  christos   ISC would like to thank Qifan Zhang of Palo Alto Networks for bringing
     25  1.1  christos   this vulnerability to our attention. :gl:`#5874`
     26  1.1  christos 
     27  1.1  christos - Malformed DNSKEY records could trigger an assertion. :cve:`2026-10822`
     28  1.1  christos 
     29  1.1  christos   Previously, ``dns_name_fromwire()`` did not honor the record boundary
     30  1.1  christos   when reading names from the wire, allowing malformed records to be
     31  1.1  christos   accepted when they should not have been. In particular, malformed
     32  1.1  christos   DNSKEY records could trigger an assertion failure when being printed.
     33  1.1  christos   This has been fixed. :gl:`#6004`
     34  1.1  christos 
     35  1.1  christos - Fix handling of RPZ CNAME expansion that returns too-long name.
     36  1.1  christos   :cve:`2026-11331`
     37  1.1  christos 
     38  1.1  christos   Previously, if the expansion of a wildcard CNAME RPZ policy resulted
     39  1.1  christos   in a name that exceeded the length limit, a self-referential CNAME and
     40  1.1  christos   the original address record were returned, allowing the policy to be
     41  1.1  christos   bypassed. In branches up to 9.20 this also left query processing in an
     42  1.1  christos   inconsistent state, which could trigger an assertion failure.
     43  1.1  christos   :iscman:`named` now returns a YXDOMAIN response, without the address.
     44  1.1  christos 
     45  1.1  christos   ISC would like to thank Laith Mash'al (0xmshal) for bringing this
     46  1.1  christos   vulnerability to our attention. :gl:`#5856`
     47  1.1  christos 
     48  1.1  christos - Prevent excessive validation work from crafted negative responses.
     49  1.1  christos   :cve:`2026-11605`
     50  1.1  christos 
     51  1.1  christos   Previously, a validating resolver could be made to perform a large
     52  1.1  christos   amount of DNSSEC validation work in response to a single answer,
     53  1.1  christos   consuming excessive CPU. A malicious authoritative server could
     54  1.1  christos   trigger this by returning a signed negative answer (NXDOMAIN or
     55  1.1  christos   NODATA) padded with many denial-of-existence proof records, which the
     56  1.1  christos   resolver continued to verify beyond its per-query validation limit. It
     57  1.1  christos   now enforces that limit on negative answers and returns SERVFAIL once
     58  1.1  christos   the limit is reached. :gl:`#4463`
     59  1.1  christos 
     60  1.1  christos - Prevent cache exhaustion under sustained attack. :cve:`2026-11622`
     61  1.1  christos 
     62  1.1  christos   Cache memory could become exhausted with expired entries whose memory
     63  1.1  christos   was not released, due to a sustained attack on the same DNS name that
     64  1.1  christos   prevented the cleanup. This has been fixed. :gl:`#4760`
     65  1.1  christos 
     66  1.1  christos - Stop accepting invalid signed wildcard records. :cve:`2026-11721`
     67  1.1  christos 
     68  1.1  christos   Signed wildcard responses in which the Labels field in the RRSIG
     69  1.1  christos   record was less than the number of labels in the Signer Name field
     70  1.1  christos   were being incorrectly accepted. This in turn broke
     71  1.1  christos   :namedconf:ref:`synth-from-dnssec`, which depends on such records
     72  1.1  christos   being correctly validated. This has been fixed.
     73  1.1  christos 
     74  1.1  christos   ISC would like to thank Qifan Zhang of Palo Alto Networks for bringing
     75  1.1  christos   this vulnerability to our attention. :gl:`#5871`
     76  1.1  christos 
     77  1.1  christos - Do not assert for some specific CNAME and DNAME queries.
     78  1.1  christos   :cve:`2026-12617`
     79  1.1  christos 
     80  1.1  christos   A bug in the resolver's handling of certain cached DNAME and CNAME
     81  1.1  christos   responses could cause :iscman:`named` to trigger an assertion failure
     82  1.1  christos   and exit. An attacker controlling a domain name and the authoritative
     83  1.1  christos   DNS server it was hosted on could exploit this behavior to cause a
     84  1.1  christos   denial-of-service. This has been fixed.
     85  1.1  christos 
     86  1.1  christos   ISC would like to thank Qifan Zhang of Palo Alto Networks for bringing
     87  1.1  christos   this vulnerability to our attention. :gl:`#5946`
     88  1.1  christos 
     89  1.1  christos - Prevent crash from malformed NSEC/NSEC3 response. :cve:`2026-13204`
     90  1.1  christos 
     91  1.1  christos   An assertion could be triggered by an improperly signed NOQNAME proof.
     92  1.1  christos   This has been fixed.
     93  1.1  christos 
     94  1.1  christos   ISC would like to thank Qifan Zhang of Palo Alto Networks for bringing
     95  1.1  christos   this vulnerability to our attention. :gl:`#5985`
     96  1.1  christos 
     97  1.1  christos - Fix DNSSEC validation bypass via out-of-zone NSEC Next Field.
     98  1.1  christos   :cve:`2026-13321`
     99  1.1  christos 
    100  1.1  christos   Previously, a malicious zone with out-of-zone NSEC next-owner names
    101  1.1  christos   could cause a DNSSEC-validating resolver to cache such a record and,
    102  1.1  christos   if :namedconf:ref:`synth-from-dnssec` was enabled, to generate
    103  1.1  christos   negative answers for any zone that was covered by the range. This has
    104  1.1  christos   been fixed.
    105  1.1  christos 
    106  1.1  christos   ISC would like to thank Qifan Zhang of Palo Alto Networks for bringing
    107  1.1  christos   this vulnerability to our attention. :gl:`#5873`
    108  1.1  christos 
    109  1.1  christos - Reclaim memory promptly when DNSSEC validations are canceled.
    110  1.1  christos 
    111  1.1  christos   When a resolver is flooded with queries that require DNSSEC validation
    112  1.1  christos   - for example during a random-subdomain attack - many of those
    113  1.1  christos   validations are canceled before they complete. Previously, a canceled
    114  1.1  christos   validation still kept its place in the internal work queue and held
    115  1.1  christos   the associated response in memory until that queued work eventually
    116  1.1  christos   ran, so memory could climb sharply under sustained load. The internal
    117  1.1  christos   work queue is now dropped as soon as the validation is canceled,
    118  1.1  christos   releasing the memory it was holding. :gl:`#4760`
    119  1.1  christos 
    120  1.1  christos Removed Features
    121  1.1  christos ~~~~~~~~~~~~~~~~
    122  1.1  christos 
    123  1.1  christos - Remove the secondary validator in ``query.c``.
    124  1.1  christos 
    125  1.1  christos   Previously, when the additional section of a response was being
    126  1.1  christos   populated, if cached data was found with pending trust, it would be
    127  1.1  christos   opportunistically validated. The code implementing this validation was
    128  1.1  christos   not quite formally correct. Rather than fixing it, the code has been
    129  1.1  christos   removed: RRsets with pending trust are now omitted from responses.
    130  1.1  christos   :gl:`#5966` :gl:`#5968` :gl:`#5972`
    131  1.1  christos 
    132  1.1  christos Bug Fixes
    133  1.1  christos ~~~~~~~~~
    134  1.1  christos 
    135  1.1  christos - Fix a bug in DNS UPDATE processing with
    136  1.1  christos   :namedconf:ref:`inline-signing` enabled.
    137  1.1  christos 
    138  1.1  christos   In rare cases the :iscman:`named` process could terminate unexpectedly
    139  1.1  christos   when processing authorized DNS UPDATE messages in quick succession
    140  1.1  christos   that were updating a zone with :namedconf:ref:`inline-signing`
    141  1.1  christos   enabled. This has been fixed. :gl:`#5816`
    142  1.1  christos 
    143  1.1  christos - Properly detect private records before copying.
    144  1.1  christos 
    145  1.1  christos   Previously, an assertion was triggered when trying to copy a private
    146  1.1  christos   record to a buffer for modification. :iscman:`named` now extends the
    147  1.1  christos   private type detection and copies the contents after rejecting invalid
    148  1.1  christos   private records. :gl:`#5857`
    149  1.1  christos 
    150  1.1  christos - Tighten referral DS acceptance.
    151  1.1  christos 
    152  1.1  christos   Previously, :iscman:`named` accepted DS records for sibling zones when
    153  1.1  christos   it shouldn't have. This has been fixed. :gl:`#5870`
    154  1.1  christos 
    155  1.1  christos - Don't synthesize negative responses with pending NSEC.
    156  1.1  christos 
    157  1.1  christos   If an NSEC record has not yet been validated and is cached with trust
    158  1.1  christos   pending, :iscman:`named` no longer uses it to synthesize negative
    159  1.1  christos   responses. :gl:`#5872` :gl:`#5887` :gl:`#5977`
    160  1.1  christos 
    161  1.1  christos - Check that an NSEC signer is at or above the name to be validated.
    162  1.1  christos 
    163  1.1  christos   A check has been added to ensure that an NSEC record being used as a
    164  1.1  christos   proof of nonexistence for a given name is not signed by a name lower
    165  1.1  christos   in the DNS hierarchy than the one in question. :gl:`#5876`
    166  1.1  christos 
    167  1.1  christos - Don't evict DNSSEC-validated cache data on a CD=1 NXDOMAIN.
    168  1.1  christos 
    169  1.1  christos   When a client sent a query with the checking-disabled (CD) bit set and
    170  1.1  christos   the answer was NXDOMAIN, the resolver cached that unvalidated negative
    171  1.1  christos   response and discarded any DNSSEC-validated records it already held
    172  1.1  christos   for the same name, even though the validated data was more
    173  1.1  christos   trustworthy. A single such response - including a forged one - could
    174  1.1  christos   flush validated records from the cache and force the resolver to fetch
    175  1.1  christos   them again. The resolver now checks the trust level of the existing
    176  1.1  christos   data first and leaves the cache unchanged when it is already
    177  1.1  christos   validated. :gl:`#5877`
    178  1.1  christos 
    179  1.1  christos - Fix a :namedconf:ref:`deny-answer-aliases` configuration bypass issue.
    180  1.1  christos 
    181  1.1  christos   It was possible to use a maliciously crafted authoritative zone to
    182  1.1  christos   make a :iscman:`named` resolver synthesize a DNAME "alias" that should
    183  1.1  christos   have been rejected by the configured :any:`deny-answer-aliases`
    184  1.1  christos   option. This has been fixed. :gl:`#5930`
    185  1.1  christos 
    186  1.1  christos - Reject external referrals from forwarders.
    187  1.1  christos 
    188  1.1  christos   Under a ``forward first;`` policy in a forwarding zone,
    189  1.1  christos   :iscman:`named` could accept NS records above the forward zone apex
    190  1.1  christos   from negative responses. This has been fixed. :gl:`#5937`
    191  1.1  christos 
    192  1.1  christos - Fix a zone transfer over TLS (XoT) issue when using the opportunistic
    193  1.1  christos   TLS mode.
    194  1.1  christos 
    195  1.1  christos   The :iscman:`named` process, running as a secondary DNS server and
    196  1.1  christos   configured to transfer a zone from a primary server using an encrypted
    197  1.1  christos   XoT transport in opportunistic TLS mode (i.e. without peer
    198  1.1  christos   certificate/hostname validation), could terminate unexpectedly when
    199  1.1  christos   the TLS ALPN negotiation with the primary server was unsuccessful.
    200  1.1  christos   This has been fixed. :gl:`#5957`
    201  1.1  christos 
    202  1.1  christos - Unvalidated opt-out NSEC3 could be accepted in insecurity proof.
    203  1.1  christos 
    204  1.1  christos   When determining whether an insecure delegation was legitimate, NSEC3
    205  1.1  christos   opt-out records which had not yet passed validation could be used.
    206  1.1  christos   This has been fixed. :gl:`#5970`
    207  1.1  christos 
    208  1.1  christos - Check wildcard signer and NOQNAME signer match.
    209  1.1  christos 
    210  1.1  christos   A positive wildcard answer, and the NSEC3 proof that the requested
    211  1.1  christos   name doesn't exist in the zone, must both be from the same zone.
    212  1.1  christos   Otherwise, an NSEC3 from an ancestor zone could be used to interfere
    213  1.1  christos   with validation.
    214  1.1  christos 
    215  1.1  christos   :iscman:`named` now retrieves the signer name from a wildcard
    216  1.1  christos   response's signature. An NSEC3 record cannot be used as a NOQNAME
    217  1.1  christos   proof for the wildcard unless it exactly matches the name one level
    218  1.1  christos   above the NSEC3. :gl:`#5971`
    219  1.1  christos 
    220  1.1  christos - Fix CNAME resolution failure caused by a cached SERVFAIL response.
    221  1.1  christos 
    222  1.1  christos   Under certain circumstances, a cached SERVFAIL response could
    223  1.1  christos   incorrectly prevent successful resolution of a CNAME target. This
    224  1.1  christos   could cause resolution failures to persist until the cached SERVFAIL
    225  1.1  christos   entry expired, even when the CNAME target itself was otherwise
    226  1.1  christos   resolvable. This has been fixed. :gl:`#5983`
    227  1.1  christos 
    228  1.1  christos - Reject unsupported RSA DNSKEY shapes during DNSSEC validation.
    229  1.1  christos 
    230  1.1  christos   An authoritative server publishing an RSA DNSKEY with an unusually
    231  1.1  christos   large modulus or an exotic public exponent could make each DNSSEC
    232  1.1  christos   signature check on a validating recursive resolver noticeably more
    233  1.1  christos   expensive than for a normally sized key. Such DNSKEYs are now treated
    234  1.1  christos   as invalid. :gl:`#6008`
    235  1.1  christos 
    236  1.1  christos - Fix a bug in GeoIP2 string matching.
    237  1.1  christos 
    238  1.1  christos   When using GeoIP2 ACLs (see :any:`acl`), :iscman:`named` could
    239  1.1  christos   incorrectly match a name using a sub-string instead of the full name
    240  1.1  christos   match. This has been fixed. :gl:`#6019`
    241  1.1  christos 
    242  1.1  christos - Fix DNS-over-HTTPS (DoH) quota configuration issue.
    243  1.1  christos 
    244  1.1  christos   The :any:`http-listener-clients` and
    245  1.1  christos   :any:`http-streams-per-connection` configuration options could be
    246  1.1  christos   truncated to smaller values (or to ``0``, which means unlimited) when
    247  1.1  christos   very large configuration values in excess of ``65535`` were used. It
    248  1.1  christos   is very unlikely that such large values were used in production, and
    249  1.1  christos   the default values for the affected options are ``300`` and ``100``,
    250  1.1  christos   respectively. This has been fixed. :gl:`#6021`
    251  1.1  christos 
    252  1.1  christos - Truncated reply to a TSIG query no longer stalls the resolver.
    253  1.1  christos 
    254  1.1  christos   When an upstream server returned a truncated reply to a query that
    255  1.1  christos   :iscman:`named` had signed with TSIG, the resolver could keep waiting
    256  1.1  christos   for a follow-up UDP packet that never arrived, stalling the query
    257  1.1  christos   until it hit the :namedconf:ref:`resolver-query-timeout` and the
    258  1.1  christos   client received no answer. :iscman:`named` now treats any reply it
    259  1.1  christos   cannot authenticate as an immediate failure and returns SERVFAIL right
    260  1.1  christos   away as a defense in depth. :gl:`#6028`
    261  1.1  christos 
    262  1.1  christos - Ignore updates removing DNSKEY RRset with class ANY.
    263  1.1  christos 
    264  1.1  christos   When a dynamic update is received that removes the DNSKEY (or CDNSKEY,
    265  1.1  christos   or CDS) RRset, :iscman:`named` now removes all records except the ones
    266  1.1  christos   that are in use for signing the zone. :gl:`#6045`
    267  1.1  christos 
    268  1.1  christos - Ignore 0-byte reads in the TCP read callback.
    269  1.1  christos 
    270  1.1  christos   Callbacks for libuv stream reads do not signal zero-length reads as a
    271  1.1  christos   failure signal but rather as EAGAIN/EWOULDBLOCK. This could trigger an
    272  1.1  christos   assertion when a zero-length read was pushed onto a PROXYv2 endpoint
    273  1.1  christos   that had not yet processed the headers, as it expected a non-NULL
    274  1.1  christos   region of positive length. :gl:`#6140`
    275  1.1  christos 
    276  1.1  christos - Only print per-zone glue stats when :namedconf:ref:`zone-statistics`
    277  1.1  christos   is set to ``full``.
    278  1.1  christos 
    279  1.1  christos   The code printing query statistics was ignoring the
    280  1.1  christos   :namedconf:ref:`zone-statistics` option. This has been fixed.
    281  1.1  christos   :gl:`#6164`
    282  1.1  christos 
    283  1.1  christos - CDS/CDNSKEY records were not removed when re-configuring the server.
    284  1.1  christos 
    285  1.1  christos   When on an :option:`rndc reconfig` the DNSSEC policy changes such that
    286  1.1  christos   it changes the expected CDNSKEY and/or CDS records in the zone, the
    287  1.1  christos   RRset should be updated accordingly. This did not happen when removing
    288  1.1  christos   digests from the configuration, or setting ``cdnskey no;``. This has
    289  1.1  christos   been fixed. :gl:`#6166`
    290  1.1  christos 
    291  1.1  christos - Fix a crash when querying an empty non-terminal in a wildcard zone in
    292  1.1  christos   RBTDB.
    293  1.1  christos 
    294  1.1  christos   A query for an empty non-terminal in a wildcard zone served from the
    295  1.1  christos   RBT zone database could abort :iscman:`named` with an assertion
    296  1.1  christos   failure. It now returns the correct NODATA answer. :gl:`#6170`
    297  1.1  christos 
    298  1.1  christos - Stop reusing outgoing TCP connections the peer has already closed.
    299  1.1  christos 
    300  1.1  christos   Previously, :iscman:`named` could hand a new query to an idle
    301  1.1  christos   forwarder/upstream TCP or TLS connection that the peer had already
    302  1.1  christos   closed, causing the query to fail (and CLOSE-WAIT sockets to pile up).
    303  1.1  christos   Idle reused connections are now watched, so a close is noticed and the
    304  1.1  christos   connection is dropped instead of reused. A new
    305  1.1  christos   :namedconf:ref:`tcp-reuse-timeout` option controls how long an idle
    306  1.1  christos   outgoing connection is kept open for reuse (default 5 seconds).
    307  1.1  christos   :gl:`#6171`
    308  1.1  christos 
    309  1.1  christos - Fix DNSSEC validation failures for names under an apex DNAME.
    310  1.1  christos 
    311  1.1  christos   DNSSEC validation could fail with SERVFAIL for names covered by a
    312  1.1  christos   DNAME at the apex of a signed zone, unless the zone's keys were
    313  1.1  christos   already validated in the cache. This regression was introduced by the
    314  1.1  christos   recent fix for resolver stalls on CNAME responses to DS queries, and
    315  1.1  christos   has now been addressed. :gl:`#6176`
    316