Release Notes¶
Contents
Introduction¶
BIND 9.16 is a stable branch of BIND. This document summarizes significant changes since the last production release on that branch. Please see the file CHANGES for a more detailed list of changes and bug fixes.
Note on Version Numbering¶
As of BIND 9.13/9.14, BIND has adopted the “odd-unstable/even-stable” release numbering convention. BIND 9.16 contains new features that were added during the BIND 9.15 development process. Henceforth, the 9.16 branch will be limited to bug fixes, and new feature development will proceed in the unstable 9.17 branch.
Supported Platforms¶
To build on UNIX-like systems, BIND requires support for POSIX.1c threads (IEEE Std 1003.1c-1995), the Advanced Sockets API for IPv6 (RFC 3542), and standard atomic operations provided by the C compiler.
The libuv asynchronous I/O library and the OpenSSL cryptography library must be available for the target platform. A PKCS#11 provider can be used instead of OpenSSL for Public Key cryptography (i.e., DNSSEC signing and validation), but OpenSSL is still required for general cryptography operations such as hashing and random number generation.
More information can be found in the PLATFORMS.md
file that is
included in the source distribution of BIND 9. If your compiler and
system libraries provide the above features, BIND 9 should compile and
run. If that is not the case, the BIND development team will generally
accept patches that add support for systems that are still supported by
their respective vendors.
Download¶
The latest versions of BIND 9 software can always be found at https://www.isc.org/download/. There you will find additional information about each release, source code, and pre-compiled versions for Microsoft Windows operating systems.
Notes for BIND 9.16.7¶
New Features¶
Add a new
rndc
command,rndc dnssec -checkds
, which signals tonamed
that a DS record for a given zone or key has been published or withdrawn from the parent. This command replaces the time-basedparent-registration-delay
configuration option. [GL #1613]Log when
named
adds a CDS/CDNSKEY to the zone. [GL #1748]
Bug Fixes¶
In rare circumstances,
named
would exit with an assertion failure when the number of nodes stored in the red-black tree exceeded the maximum allowed size of the internal hash table. [GL #2104]Silence spurious system log messages for an EPROTO(71) error code that was seen on older operating systems, where unhandled ICMPv6 errors resulted in a generic protocol error being returned instead of a more specific error code. [GL #1928]
With query name minimization enabled,
named
failed to resolveip6.arpa.
names that had extra labels to the left of the IPv6 part. For example, whennamed
attempted query name minimization on a name likeA.B.1.2.3.4.(...).ip6.arpa.
, it stopped at the leftmost IPv6 label, i.e.1.2.3.4.(...).ip6.arpa.
, without considering the extra labels (A.B
). That caused a query loop when resolving the name: ifnamed
received NXDOMAIN answers, then the same query was repeatedly sent until the number of queries sent reached the value of themax-recursion-queries
configuration option. [GL #1847]Parsing of LOC records was made more strict by rejecting a sole period (
.
) and/orm
as a value. These changes prevent zone files using such values from being loaded. Handling of negative altitudes which are not integers was also corrected. [GL #2074]Several problems found by OSS-Fuzz were fixed. (None of these are security issues.) [GL !3953] [GL !3975]
Notes for BIND 9.16.6¶
Security Fixes¶
It was possible to trigger an assertion failure by sending a specially crafted large TCP DNS message. This was disclosed in CVE-2020-8620.
ISC would like to thank Emanuel Almeida of Cisco Systems, Inc. for bringing this vulnerability to our attention. [GL #1996]
named
could crash after failing an assertion check in certain query resolution scenarios where QNAME minimization and forwarding were both enabled. To prevent such crashes, QNAME minimization is now always disabled for a given query resolution process, if forwarders are used at any point. This was disclosed in CVE-2020-8621.ISC would like to thank Joseph Gullo for bringing this vulnerability to our attention. [GL #1997]
It was possible to trigger an assertion failure when verifying the response to a TSIG-signed request. This was disclosed in CVE-2020-8622.
ISC would like to thank Dave Feldman, Jeff Warren, and Joel Cunningham of Oracle for bringing this vulnerability to our attention. [GL #2028]
When BIND 9 was compiled with native PKCS#11 support, it was possible to trigger an assertion failure in code determining the number of bits in the PKCS#11 RSA public key with a specially crafted packet. This was disclosed in CVE-2020-8623.
ISC would like to thank Lyu Chiy for bringing this vulnerability to our attention. [GL #2037]
update-policy
rules of typesubdomain
were incorrectly treated aszonesub
rules, which allowed keys used insubdomain
rules to update names outside of the specified subdomains. The problem was fixed by making suresubdomain
rules are again processed as described in the ARM. This was disclosed in CVE-2020-8624.ISC would like to thank Joop Boonen of credativ GmbH for bringing this vulnerability to our attention. [GL #2055]
New Features¶
A new configuration option
stale-cache-enable
has been introduced to enable or disable keeping stale answers in cache. [GL #1712]
Feature Changes¶
BIND’s cache database implementation has been updated to use a faster hash function with better distribution. In addition, the effective
max-cache-size
(configured explicitly, defaulting to a value based on system memory or set tounlimited
) now pre-allocates fixed-size hash tables. This prevents interruption to query resolution when the hash table sizes need to be increased. [GL #1775]Resource records received with 0 TTL are no longer kept in the cache to be used for stale answers. [GL #1829]
Bug Fixes¶
Wildcard RPZ passthru rules could incorrectly be overridden by other rules that were loaded from RPZ zones which appeared later in the
response-policy
statement. This has been fixed. [GL #1619]The IPv6 Duplicate Address Detection (DAD) mechanism could inadvertently prevent
named
from binding to new IPv6 interfaces, by causing multiple route socket messages to be sent for each IPv6 address.named
monitors for new interfaces tobind()
to when it is configured to listen onany
or on a specific range of addresses. New IPv6 interfaces can be in a “tentative” state before they are fully available for use. When DAD is in use, two messages are emitted by the route socket: one when the interface first appears and then a second one when it is fully “up.” An attempt bynamed
tobind()
to the new interface prematurely would fail, causing it thereafter to ignore that address/interface. The problem was worked around by setting theIP_FREEBIND
option on the socket and trying tobind()
to each IPv6 address again if the firstbind()
call for that address failed withEADDRNOTAVAIL
. [GL #2038]Addressed an error in recursive clients stats reporting which could cause underflow, and even negative statistics. There were occasions when an incoming query could trigger a prefetch for some eligible RRset, and if the prefetch code were executed before recursion, no increment in recursive clients stats would take place. Conversely, when processing the answers, if the recursion code were executed before the prefetch, the same counter would be decremented without a matching increment. [GL #1719]
The introduction of KASP support inadvertently caused the second field of
sig-validity-interval
to always be calculated in hours, even in cases when it should have been calculated in days. This has been fixed. (Thanks to Tony Finch.) [GL !3735]LMDB locking code was revised to make
rndc reconfig
work properly on FreeBSD and with LMDB >= 0.9.26. [GL #1976]
Notes for BIND 9.16.5¶
New Features¶
New
rndc
commandrndc dnssec -status
shows the current DNSSEC policy and keys in use, the key states, and rollover status. [GL #1612]
Bug Fixes¶
A race condition could occur if a TCP socket connection was closed while
named
was waiting for a recursive response. The attempt to send a response over the closing connection triggered an assertion failure in the functionisc__nm_tcpdns_send()
. [GL #1937]A race condition could occur when
named
attempted to use a UDP interface that was shutting down. This triggered an assertion failure inuv__udp_finish_close()
. [GL #1938]Fix assertion failure when server was under load and root zone had not yet been loaded. [GL #1862]
named
could crash when cleaning dead nodes inlib/dns/rbtdb.c
that were being reused. [GL #1968]named
crashed on shutdown when a newrndc
connection was received during shutdown. This has been fixed. [GL #1747]The DS RRset returned by
dns_keynode_dsset()
was used in a non-thread-safe manner. This could result in an INSIST being triggered. [GL #1926]Properly handle missing
kyua
command so thatmake check
does not fail unexpectedly when CMocka is installed, but Kyua is not. [GL #1950]The
primary
andsecondary
keywords, when used as parameters forcheck-names
, were not processed correctly and were being ignored. [GL #1949]rndc dnstap -roll <value>
did not limit the number of saved files to<value>
. [GL !3728]The validator could fail to accept a properly signed RRset if an unsupported algorithm appeared earlier in the DNSKEY RRset than a supported algorithm. It could also stop if it detected a malformed public key. [GL #1689]
The
blackhole
ACL was inadvertently disabled for client queries. Blocked IP addresses were not used for upstream queries but queries from those addresses could still be answered. [GL #1936]
Notes for BIND 9.16.4¶
Security Fixes¶
It was possible to trigger an assertion when attempting to fill an oversized TCP buffer. This was disclosed in CVE-2020-8618. [GL #1850]
It was possible to trigger an INSIST failure when a zone with an interior wildcard label was queried in a certain pattern. This was disclosed in CVE-2020-8619. [GL #1111] [GL #1718]
New Features¶
Documentation was converted from DocBook to reStructuredText. The BIND 9 ARM is now generated using Sphinx and published on Read the Docs. Release notes are no longer available as a separate document accompanying a release. [GL #83]
named
andnamed-checkzone
now reject master zones that have a DS RRset at the zone apex. Attempts to add DS records at the zone apex via UPDATE will be logged but otherwise ignored. DS records belong in the parent zone, not at the zone apex. [GL #1798]dig
and other tools can now print the Extended DNS Error (EDE) option when it appears in a request or a response. [GL #1835]
Feature Changes¶
The default value of
max-stale-ttl
has changed from 1 week to 12 hours. This option controls how longnamed
retains expired RRsets in cache as a potential mitigation mechanism, should there be a problem with one or more domains. Note that cache content retention is independent of whether stale answers are used in response to client queries (stale-answer-enable yes|no
andrndc serve-stale on|off
). Serving of stale answers when the authoritative servers are not responding must be explicitly enabled, whereas the retention of expired cache content takes place automatically on all versions of BIND 9 that have this feature available. [GL #1877]Warning
This change may be significant for administrators who expect that stale cache content will be automatically retained for up to 1 week. Add option
max-stale-ttl 1w;
tonamed.conf
to keep the previous behavior ofnamed
.listen-on-v6 { any; }
creates a separate socket for each interface. Previously, just one socket was created on systems conforming to RFC 3493 and RFC 3542. This change was introduced in BIND 9.16.0, but it was accidentally omitted from documentation. [GL #1782]
Bug Fixes¶
When fully updating the NSEC3 chain for a large zone via IXFR, a temporary loss of performance could be experienced on the secondary server when answering queries for nonexistent data that required DNSSEC proof of non-existence (in other words, queries that required the server to find and to return NSEC3 data). The unnecessary processing step that was causing this delay has now been removed. [GL #1834]
named
could crash with an assertion failure if the name of a database node was looked up while the database was being modified. [GL #1857]A possible deadlock in
lib/isc/unix/socket.c
was fixed. [GL #1859]Previously,
named
did not destroy some mutexes and conditional variables in netmgr code, which caused a memory leak on FreeBSD. This has been fixed. [GL #1893]A data race in
lib/dns/resolver.c:log_formerr()
that could lead to an assertion failure was fixed. [GL #1808]Previously,
provide-ixfr no;
failed to return up-to-date responses when the serial number was greater than or equal to the current serial number. [GL #1714]A bug in dnssec-policy keymgr was fixed, where the check for the existence of a given key’s successor would incorrectly return
true
if any other key in the keyring had a successor. [GL #1845]With dnssec-policy, when creating a successor key, the “goal” state of the current active key (the predecessor) was not changed and thus never removed from the zone. [GL #1846]
named-checkconf -p
could include spurious text inserver-addresses
statements due to an uninitialized DSCP value. This has been fixed. [GL #1812]The ARM has been updated to indicate that the TSIG session key is generated when named starts, regardless of whether it is needed. [GL #1842]
Notes for BIND 9.16.3¶
Known Issues¶
BIND crashes on startup when linked against libuv 1.36. This issue is related to
recvmmsg()
support in libuv, which was first included in libuv 1.35. The problem was addressed in libuv 1.37, but the relevant libuv code change requires a special flag to be set during library initialization in order forrecvmmsg()
support to be enabled. This BIND release sets that special flag when required, sorecvmmsg()
support is now enabled when BIND is compiled against either libuv 1.35 or libuv 1.37+; libuv 1.36 is still not usable with BIND. [GL #1761] [GL #1797]
Feature Changes¶
BIND 9 no longer sets receive/send buffer sizes for UDP sockets, relying on system defaults instead. [GL #1713]
The default rwlock implementation has been changed back to the native BIND 9 rwlock implementation. [GL #1753]
The native PKCS#11 EdDSA implementation has been updated to PKCS#11 v3.0 and thus made operational again. Contributed by Aaron Thompson. [GL !3326]
The OpenSSL ECDSA implementation has been updated to support PKCS#11 via OpenSSL engine (see engine_pkcs11 from libp11 project). [GL #1534]
The OpenSSL EdDSA implementation has been updated to support PKCS#11 via OpenSSL engine. Please note that an EdDSA-capable OpenSSL engine is required and thus this code is only a proof-of-concept for the time being. Contributed by Aaron Thompson. [GL #1763]
Message IDs in inbound AXFR transfers are now checked for consistency. Log messages are emitted for streams with inconsistent message IDs. [GL #1674]
The zone timers are now exported to the statistics channel. For the primary zones, only the loaded time is exported. For the secondary zones, the exported timers also include expire and refresh times. Contributed by Paul Frieden, Verizon Media. [GL #1232]
Bug Fixes¶
A bug in dnstap initialization could prevent some dnstap data from being logged, especially on recursive resolvers. [GL #1795]
When running on a system with support for Linux capabilities,
named
drops root privileges very soon after system startup. This was causing a spurious log message,unable to set effective uid to 0: Operation not permitted
, which has now been silenced. [GL #1042] [GL #1090]When
named-checkconf
was run, it would sometimes incorrectly set its exit code. It reflected only the status of the last view found; any errors found for other configured views were not reported. Thanks to Graham Clinch. [GL #1807]When built without LMDB support,
named
failed to restart after a zone with a double quote (“) in its name was added withrndc addzone
. Thanks to Alberto Fernández. [GL #1695]
Notes for BIND 9.16.2¶
Security Fixes¶
DNS rebinding protection was ineffective when BIND 9 is configured as a forwarding DNS server. Found and responsibly reported by Tobias Klein. [GL #1574]
Known Issues¶
We have received reports that in some circumstances, receipt of an IXFR can cause the processing of queries to slow significantly. Some of these were related to RPZ processing, which has been fixed in this release (see below). Others appear to occur where there are NSEC3-related changes (such as an operator changing the NSEC3 salt used in the hash calculation). These are being investigated. [GL #1685]
Feature Changes¶
The previous DNSSEC sign statistics used lots of memory. The number of keys to track is reduced to four per zone, which should be enough for 99% of all signed zones. [GL #1179]
Bug Fixes¶
When an RPZ policy zone was updated via zone transfer and a large number of records was deleted,
named
could become nonresponsive for a short period while deleted names were removed from the RPZ summary database. This database cleanup is now done incrementally over a longer period of time, reducing such delays. [GL #1447]When trying to migrate an already-signed zone from
auto-dnssec maintain
to one based ondnssec-policy
, the existing keys were immediately deleted and replaced with new ones. As the key rollover timing constraints were not being followed, it was possible that some clients would not have been able to validate responses until all old DNSSEC information had timed out from caches. BIND now looks at the time metadata of the existing keys and incorporates it into its DNSSEC policy operation. [GL #1706]
Notes for BIND 9.16.1¶
Known Issues¶
UDP network ports used for listening can no longer simultaneously be used for sending traffic. An example configuration which triggers this issue would be one which uses the same address:port pair for
listen-on(-v6)
statements as fornotify-source(-v6)
ortransfer-source(-v6)
. While this issue affects all operating systems, it only triggers log messages (e.g. “unable to create dispatch for reserved port”) on some of them. There are currently no plans to make such a combination of settings work again.
Feature Changes¶
The system-provided POSIX Threads read-write lock implementation is now used by default instead of the native BIND 9 implementation. Please be aware that glibc versions 2.26 through 2.29 had a bug that could cause BIND 9 to deadlock. A fix was released in glibc 2.30, and most current Linux distributions have patched or updated glibc, with the notable exception of Ubuntu 18.04 (Bionic) which is a work in progress. If you are running on an affected operating system, compile BIND 9 with
--disable-pthread-rwlock
until a fixed version of glibc is available. [GL !3125]
Notes for BIND 9.16.0¶
Note: this section only lists changes from BIND 9.14 (the previous stable branch of BIND).
New Features¶
A new asynchronous network communications system based on
libuv
is now used bynamed
for listening for incoming requests and responding to them. This change will make it easier to improve performance and implement new protocol layers (for example, DNS over TLS) in the future. [GL #29]The new
dnssec-policy
option allows the configuration of a key and signing policy (KASP) for zones. This option enablesnamed
to generate new keys as needed and automatically roll both ZSK and KSK keys. (Note that the syntax for this statement differs from the DNSSEC policy used bydnssec-keymgr
.) [GL #1134]In order to clarify the configuration of DNSSEC keys, the
trusted-keys
andmanaged-keys
statements have been deprecated, and the newtrust-anchors
statement should now be used for both types of key.When used with the keyword
initial-key
,trust-anchors
has the same behavior asmanaged-keys
, i.e., it configures a trust anchor that is to be maintained via RFC 5011.When used with the new keyword
static-key
,trust-anchors
has the same behavior astrusted-keys
, i.e., it configures a permanent trust anchor that will not automatically be updated. (This usage is not recommended for the root key.) [GL #6]Two new keywords have been added to the
trust-anchors
statement:initial-ds
andstatic-ds
. These allow the use of trust anchors in DS format instead of DNSKEY format. DS format allows trust anchors to be configured for keys that have not yet been published; this is the format used by IANA when announcing future root keys.As with the
initial-key
andstatic-key
keywords,initial-ds
configures a dynamic trust anchor to be maintained via RFC 5011, andstatic-ds
configures a permanent trust anchor. [GL #6] [GL #622]dig
,mdig
anddelv
can all now take a+yaml
option to print output in a detailed YAML format. [GL #1145]dig
now has a new command line option:+[no]unexpected
. By default,dig
won’t accept a reply from a source other than the one to which it sent the query. Add the+unexpected
argument to enable it to process replies from unexpected sources. [RT #44978]dig
now accepts a new command line option,+[no]expandaaaa
, which causes the IPv6 addresses in AAAA records to be printed in full 128-bit notation rather than the default RFC 5952 format. [GL #765]Statistics channel groups can now be toggled. [GL #1030]
Feature Changes¶
When static and managed DNSSEC keys were both configured for the same name, or when a static key was used to configure a trust anchor for the root zone and
dnssec-validation
was set to the default value ofauto
, automatic RFC 5011 key rollovers would be disabled. This combination of settings was never intended to work, but there was no check for it in the parser. This has been corrected, and it is now a fatal configuration error. [GL #868]DS and CDS records are now generated with SHA-256 digests only, instead of both SHA-1 and SHA-256. This affects the default output of
dnssec-dsfromkey
, thedsset
files generated bydnssec-signzone
, the DS records added to a zone bydnssec-signzone
based onkeyset
files, the CDS records added to a zone bynamed
anddnssec-signzone
based on “sync” timing parameters in key files, and the checks performed bydnssec-checkds
. [GL #1015]named
will now log a warning if a static key is configured for the root zone. [GL #6]A SipHash 2-4 based DNS Cookie (RFC 7873) algorithm has been added and made default. Old non-default HMAC-SHA based DNS Cookie algorithms have been removed, and only the default AES algorithm is being kept for legacy reasons. This change has no operational impact in most common scenarios. [GL #605]
If you are running multiple DNS servers (different versions of BIND 9 or DNS servers from multiple vendors) responding from the same IP address (anycast or load-balancing scenarios), make sure that all the servers are configured with the same DNS Cookie algorithm and same Server Secret for the best performance.
The information from the
dnssec-signzone
anddnssec-verify
commands is now printed to standard output. The standard error output is only used to print warnings and errors, and in case the user requests the signed zone to be printed to standard output with the-f -
option. A new configuration option-q
has been added to silence all output on standard output except for the name of the signed zone. [GL #1151]The DNSSEC validation code has been refactored for clarity and to reduce code duplication. [GL #622]
Compile-time settings enabled by the
--with-tuning=large
option forconfigure
are now in effect by default. Previously used default compile-time settings can be enabled by passing--with-tuning=small
toconfigure
. [GL !2989]JSON-C is now the only supported library for enabling JSON support for BIND statistics. The
configure
option has been renamed from--with-libjson
to--with-json-c
. Set thePKG_CONFIG_PATH
environment variable accordingly to specify a custom path to thejson-c
library, as the newconfigure
option does not take the library installation path as an optional argument. [GL #855]./configure
no longer sets--sysconfdir
to/etc
or--localstatedir
to/var
when--prefix
is not specified and the aforementioned options are not specified explicitly. Instead, Autoconf’s defaults of$prefix/etc
and$prefix/var
are respected. [GL #658]
Removed Features¶
The
dnssec-enable
option has been obsoleted and no longer has any effect. DNSSEC responses are always enabled if signatures and other DNSSEC data are present. [GL #866]DNSSEC Lookaside Validation (DLV) is now obsolete. The
dnssec-lookaside
option has been marked as deprecated; when used innamed.conf
, it will generate a warning but will otherwise be ignored. All code enabling the use of lookaside validation has been removed from the validator,delv
, and the DNSSEC tools. [GL #7]The
cleaning-interval
option has been removed. [GL !1731]
License¶
BIND 9 is open source software licensed under the terms of the Mozilla
Public License, version 2.0 (see the LICENSE
file for the full
text).
The license requires that if you make changes to BIND and distribute them outside your organization, those changes must be published under the same license. It does not require that you publish or disclose anything other than the changes you have made to our software. This requirement does not affect anyone who is using BIND, with or without modifications, without redistributing it, nor anyone redistributing BIND without changes.
Those wishing to discuss license compliance may contact ISC at https://www.isc.org/contact/.
End of Life¶
The end of life date for BIND 9.16 has not yet been determined. At some point in the future, BIND 9.16 will be designated as an Extended Support Version (ESV). Until then, the current ESV is BIND 9.11, which will be supported until at least December 2021. See https://kb.isc.org/docs/aa-00896 for details of ISC’s software support policy.