Commit Graph

39063 Commits

Author SHA1 Message Date
Michal Nowak
0077cfd7a6 Refresh base image repos before installing from them
Stale repositories cause issue on installation in the docs:pdf CI job:

    E: Failed to fetch http://deb.debian.org/debian/pool/main/s/systemd/libsystemd-shared_252.22-1%7edeb12u1_amd64.deb  404  Not Found [IP: 2a04:4e42:78::644 80]
    E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

(cherry picked from commit 211a514dbd5d122a37ddb29f6db63edc86af73b7)
2024-07-08 15:34:10 +02:00
Nicki Křížek
df02a1313b Merge branch 'nicki/prepare-documentation-for-bind-9.18.28' into 'v9.18.28-release'
Prepare documentation for BIND 9.18.28

See merge request isc-private/bind9!707
2024-07-08 13:11:44 +00:00
Nicki Křížek
a4461699e2 Extend max-types-per-name documentation 2024-07-08 13:56:39 +02:00
Nicki Křížek
750d72c978 Move [GL #4473] to security fixes 2024-07-08 13:56:39 +02:00
Nicki Křížek
d9dbb0d104 Tweak and reword release notes 2024-07-08 13:56:39 +02:00
Nicki Křížek
922f98a330 Add release note for [GL #4708] 2024-07-08 13:56:39 +02:00
Nicki Křížek
099e0fb0a3 Add release note for [GL #4736] 2024-07-08 13:56:39 +02:00
Nicki Křížek
fdad7bb84b Add release note for [GL #3472] 2024-07-08 13:56:39 +02:00
Nicki Křížek
6c12c81266 Prepare release notes for BIND 9.18.28 2024-07-08 13:56:38 +02:00
Nicki Křížek
4fd679054f Use a dedicated CHANGES entry for SIG(0) removal
As opposed to the main branch (where the SIG(0) was changed), it has
been removed from the maintenance branches. Use a different changes
number to indicate there was a different solution of the issue.
2024-07-08 13:56:37 +02:00
Nicki Křížek
ec3e15da3a Merge branch 'tcp-reset-connection-on-failed-send-9.18' into 'v9.18.28-release'
[9.18][CVE-2024-0760 (part 3)] Reset the TCP connection on a failed send

See merge request isc-private/bind9!722
2024-07-03 15:51:09 +00:00
Artem Boldariev
c33b3d26f6 TCP/TLS DNS: unthrottle only when all input data processing
This commit ensures that we restart reading only when all DNS data in
the input buffer is processed so the we will not get into the
situation when the buffer is overrun.
2024-07-03 15:08:01 +02:00
Ondřej Surý
e31190e704 Reset the TCP connection on a failed send
When sending fails, the ns__client_request() would not reset the
connection and continue as nothing is happening.  This comes from the
model that we don't care about failed UDP sends because datagrams are
unreliable anyway, but it greatly affects TCP connections with
keep-alive.

The worst case scenario is as follows:

1. the 3-way TCP handshake gets completed
2. the libuv calls the "uv_connection_cb" callback
3. the TCP connection gets queue because of the tcp-clients quota
4. the TCP client sends as many DNS messages as the buffers allow
5. the TCP connection gets dropped by the client due to the timeout
6. the TCP connection gets accepted by the server
7. the data already sent by the client gets read
8. all sending fails immediately because the TCP connection is dead
9. we consume all the data in the buffer in a very tight loop

As it doesn't make sense to trying to process more data on the TCP
connection when the sending is failing, drop the connection immediately
on the first sending error.

(cherry picked from commit bf9fd2a6ff)
2024-07-03 09:10:30 +02:00
Ondřej Surý
4b7c61381f Throttle the reading when writes are asynchronous
Be more aggressive when throttling the reading - when we can't send the
outgoing TCP synchronously with uv_try_write(), we start throttling the
reading immediately instead of waiting for the send buffers to fill up.

This should not affect behaved clients that read the data from the TCP
on the other end.

(cherry picked from commit bc3e713317)
2024-07-03 09:10:20 +02:00
Nicki Křížek
050a88898a Merge branch '3405-security-limit-the-number-of-resource-records-in-rrset-nxdomain-9.18' into 'v9.18.28-release'
[9.18][CVE-2024-1737 (part 2)] Be smarter about refusing to add many RR types to the database

See merge request isc-private/bind9!713
2024-07-02 11:05:57 +00:00
Ondřej Surý
8979166d35 Add more tests for adding many RR types to the database
More reclimit tests that test various scenarios adding combinations of
priority and non-priority RR types into the database.
2024-07-01 15:04:43 +02:00
Ondřej Surý
7f99d7e565 Be smarter about refusing to add many RR types to the database
Instead of outright refusing to add new RR types to the cache, be a bit
smarter:

1. If the new header type is in our priority list, we always add either
   positive or negative entry at the beginning of the list.

2. If the new header type is negative entry, and we are over the limit,
   we mark it as ancient immediately, so it gets evicted from the cache
   as soon as possible.

3. Otherwise add the new header after the priority headers (or at the
   head of the list).

4. If we are over the limit, evict the last entry on the normal header
   list.

(cherry picked from commit 57cd34441a)
2024-07-01 15:04:43 +02:00
Ondřej Surý
90c7c8078b Make the resolver qtype ANY test order agnostic
Instead of relying on a specific order of the RR types in the databases
pick the first RR type as returned from the cache.

(cherry picked from commit 58f660cf2b)
2024-07-01 13:15:04 +02:00
Ondřej Surý
c2650f5331 Expand the list of the priority types
Add HTTPS, SVCB, SRV, PTR, NAPTR, DNSKEY and TXT records to the list of
the priority types that are put at the beginning of the slabheader list
for faster access and to avoid eviction when there are more types than
the max-types-per-name limit.

(cherry picked from commit b27c6bcce8)
2024-07-01 13:14:57 +02:00
Nicki Křížek
90be23f030 Merge branch 'tcp-do-not-unthrottle-on_isc_nm_read-v9.18' into 'v9.18.28-release'
[9.18][CVE-2024-0760 (part 2)] Do not un-throttle TCP connections on isc_nm_read(), add throttling to TLS DNS

See merge request isc-private/bind9!709
2024-06-25 08:48:37 +00:00
Artem Boldariev
d4b1f7f239 Use smaller pools of requests and handles for sockets
This commit ensures that socket objects use smaller sizes for its
internal requests and handles pools. That prevents a memory allocator
from thrashing.
2024-06-18 17:54:17 +03:00
Artem Boldariev
16c1d1eb2e Avoid indefinite send re-scheduling in TLS DNS
When a peer is not reading the data we are sending it was for the TLS
DNS code to end up in a situation when it would indefinitely
reschedule send requests, effectively turning the 'uv_loop' into a
busy loop that would consume CPU cycles in endless efforts to send
outgoing data.

The main reason for that was only one send buffer dedicated for sends:
the code would re-queue sends until it is empty - that would never
happen when the remote side is not reading data.

That seems like an omission from the older day of the Network Manager
as it is quiet simple to make the code use multiple buffers for
sends. That ultimately breaks the cycle of futile send request
rescheduling.

As a side effect, this commit also gets rid of one memory copying on a
hot path.
2024-06-18 11:58:59 +03:00
Artem Boldariev
c71a61c44b Introduce TCP throttling into TLS DNS code
Throttling functionality was omitted from the
c6f13f12cd. This commit fixes that,
taking into account the latest developments in this area.
2024-06-18 11:58:59 +03:00
Artem Boldariev
eb4678e0b8 Do not un-throttle TCP connections on isc_nm_read()
Due to omission it was possible to un-throttle a TCP connection
previously throttled due to the peer not reading back data we are
sending.

In particular, that affected DoH code, but it could also affect other
transports (the current or future ones) that pause/resume reading
according to its internal state.

(cherry picked from commit d228aa8bbb944fbd04baf22d151fde5c33561e26)
2024-06-18 11:58:59 +03:00
Nicki Křížek
5b83419fa9 Merge branch '4507-confidential-clear-zversion-v9_18' into 'v9.18.28-release'
[9.18] [CVE-2024-4076] serve-stale zversion crash

See merge request isc-private/bind9!687
2024-06-10 17:27:54 +00:00
Matthijs Mekking
acfb8508a8 Add release note for [GL #4507]
(cherry picked from commit 454f245a7047571afdfda62978ea75dda119a712)
2024-06-10 19:25:15 +02:00
Mark Andrews
7d3042c384 Add CHANGES note for [GL #4507]
(cherry picked from commit 09ff8b1169f8be6867c0b2004d0369d246ad2994)
2024-06-10 19:24:39 +02:00
Mark Andrews
9cfd20cd90 Clear qctx->zversion
Clear qctx->zversion when clearing qctx->zrdataset et al in
lib/ns/query.c:qctx_freedata.  The uncleared pointer could lead to
an assertion failure if zone data needed to be re-saved which could
happen with stale data support enabled.

(cherry picked from commit 179fb3532ab8d4898ab070b2db54c0ce872ef709)
2024-06-10 19:20:06 +02:00
Nicki Křížek
1e6cf868dd Merge branch 'security-4480-drop-sig0-support' into 'v9.18.28-release'
[9.18] [CVE-2024-1975] Remove support for SIG(0) message verification

See merge request isc-private/bind9!690
2024-06-10 17:17:52 +00:00
Petr Špaček
5aef5f1fb9 Add release note for GL #4480 2024-06-10 19:08:50 +02:00
Petr Špaček
8acd71b9cc Add CHANGES note for [GL #4480] 2024-06-10 19:07:00 +02:00
Aram Sargsyan
227f9aa064 Adapt the upforwd test to the SIG(0) removal
Change the check so that update with SIG(0) is expected to fail.
2024-06-10 19:02:52 +02:00
Petr Špaček
02dffb63a8 Adapt the tsiggss test to the SIG(0) removal
Test that SIG(0) signer is NOT sent to the external socket for
authorization. It MUST NOT be considered a valid signature by
any chance.

Also check that the signer's name does not appear in authsock.pl
output.
2024-06-10 19:02:52 +02:00
Aram Sargsyan
4b1f026ad9 Enable stdout autoflush in authsock.pl
With enabled buffering the output gets lost when the process
receives a TERM signal. Disable the buffering.
2024-06-10 19:02:52 +02:00
Petr Špaček
33007e302d Document SIG(0) verification removal 2024-06-10 19:02:51 +02:00
Petr Špaček
bef3d2cca3 Remove support for SIG(0) message verification 2024-06-10 19:02:49 +02:00
Nicki Křížek
5220f4c977 Merge branch '3405-security-limit-the-number-of-resource-records-in-rrset-9.18' into 'v9.18.28-release'
[9.18] Add a limit to the number of RRs in RRSets

See merge request isc-private/bind9!697
2024-06-10 16:56:11 +00:00
Matthijs Mekking
a97f52263b Log rekey failure as error if too many records
By default we log a rekey failure on debug level. We should probably
change the log level to error. We make an exception for when the zone
is not loaded yet, it often happens at startup that a rekey is
run before the zone is fully loaded.

(cherry picked from commit 68b840c731527e01699afaf084559152124b717a)
2024-06-10 18:51:28 +02:00
Matthijs Mekking
7bb36ae56e Log error when update fails
The new "too many records" error can make an update fail without the
error being logged. This commit fixes that.

(cherry picked from commit 558923e5405894cf976d102f0d246a28bdbb400c)
2024-06-10 18:51:28 +02:00
Evan Hunt
b89e516420 fix a memory leak that could occur when signing
when signatures were not added because of too many types already
existing at a node, the diff was not being cleaned up; this led to
a memory leak being reported at shutdown.

(cherry picked from commit 2825bdb1ae5be801e7ed603ba2455ed9a308f1f7)
2024-06-10 18:51:27 +02:00
Matthijs Mekking
2f5c670ce9 Add new test cases with DNSSEC signing
kasp-max-types-per-name (named2.conf.in):
An unsigned zone with RR type count on a name right below the
configured limit. Then sign the zone using KASP. Adding a RRSIG would
push it over the RR type limit per name. Signing should fail, but
the server should not crash, nor end up in infinite resign-attempt loop.

kasp-max-records-per-type-dnskey (named1.conf.in):
Test with low max-record-per-rrset limit and a DNSSEC policy requiring
more than the limit. Signing should fail.

kasp-max-types-per-name (named1.conf.in):
Each RRSIG(covered type) is counted as an individual RR type. Test the
corner case where a signed zone, which is just below the limit-1,
adds a new type - doing so would trigger signing for the new type and
thus increase the number of "types" by 2, pushing it over the limit
again.

(cherry picked from commit 14e5230f897a178221b606c242b8fbcb357704aa)
2024-06-10 18:51:27 +02:00
Matthijs Mekking
4a0118c16e Check if restart works
(cherry picked from commit 4e69ece8f27f3623a4c7a9100477a5547b94c311)
2024-06-10 18:51:27 +02:00
Matthijs Mekking
6fe1df142b Switch to inline-signing no
(cherry picked from commit 0949221c07fe102ca608899b21f1f5ac5e271953)
2024-06-10 18:51:27 +02:00
Matthijs Mekking
270512949e Add test cases that use DNSSEC signing
Add two new masterformat tests that use signing. In the case of
'under-limit-kasp', the signing will keep the number of records in the
RRset under the limit. In the case of 'on-limit-kasp', the signing
will push the number of records in the RRset over the limit, because
of the added RRSIG record.

(cherry picked from commit 4c677882e66883670990a771337ecbb5206a6faa)
2024-06-10 18:51:27 +02:00
Petr Špaček
5067ab6120 Remove duplicated empty zone files
(cherry picked from commit 1456b4fc7778b851256107dbc79fb67d45f752f5)
2024-06-10 18:51:26 +02:00
Petr Špaček
aa2a1ab919 masterformat: rename zone names to reflect intended meaning
(cherry picked from commit d34bfb1eeaa2f8faab80b1620b992b5495e6f88c)
2024-06-10 18:51:26 +02:00
Petr Špaček
e38a92cef8 Test owner name rename: a b c d e -> <number>-txt
(cherry picked from commit 6ce03f75d1935c2e1991e9c0a01c49b0099a58cb)
2024-06-10 18:51:26 +02:00
Petr Špaček
1a8ea606d9 Test variable rename i->_attempt
(cherry picked from commit 13417eb277cc8a30ee4ddbb6fc02442b0d8e6d3c)
2024-06-10 18:51:26 +02:00
Petr Špaček
ac39dcb397 Test variable rename a->rrcount
(cherry picked from commit 338b45ae713cded921fd3e5494ca38bd59ff9ee8)
2024-06-10 18:51:26 +02:00
Evan Hunt
cdff65122e Add CHANGES and release note for [GL #3403]
(cherry picked from commit 54bcbe9a2af6332ce8ffb7190edf40533404c93d)
2024-06-10 18:51:23 +02:00