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