Operational Notification: An error in handling TCP client quota limits can exhaust TCP connections in BIND 9.16.0
Posting date: 05 March 2020
Program Impacted: BIND
Versions affected: 9.16.0. Also versions 9.15.6 -> 9.15.8 of the 9.15 development branch.
One part of the development work done in the BIND 9.15 branch was to modernize BIND's networking framework to use libuv, a multi-platform C library that provides support for asynchronous I/O based on event loops.
Unfortunately, during this work we introduced a problem in enforcing TCP client quota limits. A discrepancy in our quota code can result in a situation where the count is not properly decremented in some cases.
Under some circumstances, especially if a server is accepting TCP connections from clients on multiple interfaces, once the quota has been reached the server may stop accepting new TCP connections even after the number of active TCP connections has fallen back below the quota limit.
Servers which encounter this defect will continue accepting and processing UDP queries (which represent the majority of query traffic on most servers) but can lose the ability to accept new TCP connections until the server is restarted.
To avoid reaching this condition accidentally the operator of an affected server can provision the tcp-clients limit high enough so that it is not expected to be encountered in normal operation. However a malicious party could still succeed in triggering it deliberately.
Since the workaround listed above is not effective against deliberate exploitation ISC recommends that operators running an affected release of BIND either:
- Download a patch diff (from https://downloads.isc.org/isc/bind9/9.16.0/patches), apply it to the 9.16.0 source code using the patch utility, and recompile to include the behavior fix which will be included in the next release of the 9.16 branch to prevent this defect, or
- Revert to a stable production release of BIND from a branch before the libuv networking restructuring introduced in 9.15/9.16. At the present time our supported release branches are 9.11 (most recent release: 9.11.16) and 9.14 (most recent release: 9.14.11).
Acknowledgements: ISC would like to thank Jay Ford of the University of Iowa for reporting this issue.
Do you still have questions? Questions regarding this advisory should go to firstname.lastname@example.org. To report a new issue, please encrypt your message using email@example.com's PGP key which can be found here: https://www.isc.org/pgpkey/. If you are unable to use encrypted email, you may also report new issues at: https://www.isc.org/reportbug/.
Note: ISC patches only currently supported versions. When possible we indicate EOL versions affected. (For current information on which versions are actively supported, please see https://www.isc.org/download/).
ISC Security Vulnerability Disclosure Policy: Details of our current security advisory policy and practice can be found here: ISC Software Defect and Security Vulnerability Disclosure Policy.
This Knowledgebase article is the complete and official operational notification document.
Internet Systems Consortium (ISC) is providing this notice on an "AS IS" basis. No warranty or guarantee of any kind is expressed in this notice and none should be implied. ISC expressly excludes and disclaims any warranties regarding this notice or materials referred to in this notice, including, without limitation, any implied warranty of merchantability, fitness for a particular purpose, absence of hidden defects, or of non-infringement. Your use or reliance on this notice or materials referred to in this notice is at your own risk. ISC may change this notice at any time. A stand-alone copy or paraphrase of the text of this document that omits the document URL is an uncontrolled copy. Uncontrolled copies may lack important information, be out of date, or contain factual errors.