|
|
302b22 |
From c705a3eac69286b47a70b851aa5dd9119d04512f Mon Sep 17 00:00:00 2001
|
|
|
302b22 |
From: Petr Mensik <pemensik@redhat.com>
|
|
|
302b22 |
Date: Tue, 23 Jul 2019 16:43:55 +0200
|
|
|
302b22 |
Subject: [PATCH] Fix CVE-2018-5745
|
|
|
302b22 |
|
|
|
302b22 |
Squashed commit of the following:
|
|
|
302b22 |
|
|
|
302b22 |
commit c38e1dd10567e246bb802d889c3b2d2d286c7616
|
|
|
302b22 |
Author: Evan Hunt <each@isc.org>
|
|
|
302b22 |
Date: Fri Dec 21 17:24:47 2018 -0800
|
|
|
302b22 |
|
|
|
302b22 |
use algorithm 255 for both unsupported keys
|
|
|
302b22 |
|
|
|
302b22 |
(cherry picked from commit de8b2d4a6a97bb2ddf19024918581e70512ebc41)
|
|
|
302b22 |
|
|
|
302b22 |
commit caf8a62270c850fbc59cfa6bb9dcedb2ef7228c2
|
|
|
302b22 |
Author: Matthijs Mekking <matthijs@isc.org>
|
|
|
302b22 |
Date: Wed Dec 19 18:45:43 2018 +0100
|
|
|
302b22 |
|
|
|
302b22 |
Add tests for mkeys with unsupported algorithm
|
|
|
302b22 |
|
|
|
302b22 |
These tests check if a key with an unsupported algorithm in
|
|
|
302b22 |
managed-keys is ignored and when seeing an algorithm rollover to
|
|
|
302b22 |
an unsupported algorithm, the new key will be ignored too.
|
|
|
302b22 |
|
|
|
302b22 |
(cherry picked from commit 144cb53d0ae3aa5e6e3123720b603f9ab2bd1fa9)
|
|
|
302b22 |
(cherry picked from commit 8c2a8ca50946449bf26a7e0843cc5e54e36071ae)
|
|
|
302b22 |
|
|
|
302b22 |
commit 634655f38385595fb9a35e93ec3a72ed4c48bda6
|
|
|
302b22 |
Author: Matthijs Mekking <matthijs@isc.org>
|
|
|
302b22 |
Date: Wed Dec 19 18:47:43 2018 +0100
|
|
|
302b22 |
|
|
|
302b22 |
Update keyfetch_done compute_tag check
|
|
|
302b22 |
|
|
|
302b22 |
If in keyfetch_done the compute_tag fails (because for example the
|
|
|
302b22 |
algorithm is not supported), don't crash, but instead ignore the
|
|
|
302b22 |
key.
|
|
|
302b22 |
|
|
|
302b22 |
(cherry picked from commit b1d5411569ae10830b63f07560091193646cc739)
|
|
|
302b22 |
(cherry picked from commit 8f64928e2eb9395d8cdcd62183a1eaec3b1c5256)
|
|
|
302b22 |
|
|
|
302b22 |
commit e5cb28c3f3df4c37d528665e67fb460cc1662259
|
|
|
302b22 |
Author: Matthijs Mekking <github@pletterpet.nl>
|
|
|
302b22 |
Date: Wed Dec 12 14:06:10 2018 +0100
|
|
|
302b22 |
|
|
|
302b22 |
Don't free key in compute_tag in case of failure
|
|
|
302b22 |
|
|
|
302b22 |
If `dns_dnssec_keyfromrdata` failed we don't need to call
|
|
|
302b22 |
`dst_key_free` because no `dstkey` was created. Doing so
|
|
|
302b22 |
nevertheless will result in an assertion failure.
|
|
|
302b22 |
|
|
|
302b22 |
This can happen if the key uses an unsupported algorithm.
|
|
|
302b22 |
|
|
|
302b22 |
(cherry picked from commit 7a1ca39b950b7d5230b605ac60f15a1cb94e3d69)
|
|
|
302b22 |
(cherry picked from commit acae423ef4274c5535da324da78ce1441628d5f6)
|
|
|
302b22 |
---
|
|
|
302b22 |
bin/tests/system/mkeys/README | 3 +
|
|
|
302b22 |
bin/tests/system/mkeys/clean.sh | 2 +
|
|
|
302b22 |
bin/tests/system/mkeys/ns1/root.db | 20 +++----
|
|
|
302b22 |
bin/tests/system/mkeys/ns1/sign.sh | 7 ++-
|
|
|
302b22 |
bin/tests/system/mkeys/ns1/unsupported.key | 1 +
|
|
|
302b22 |
bin/tests/system/mkeys/ns6/named.args | 1 +
|
|
|
302b22 |
bin/tests/system/mkeys/ns6/named.conf.in | 43 +++++++++++++++
|
|
|
302b22 |
bin/tests/system/mkeys/ns6/setup.sh | 30 ++++++++++
|
|
|
302b22 |
.../system/mkeys/ns6/unsupported-managed.key | 1 +
|
|
|
302b22 |
bin/tests/system/mkeys/ns7/named.conf.in | 50 +++++++++++++++++
|
|
|
302b22 |
bin/tests/system/mkeys/setup.sh | 1 +
|
|
|
302b22 |
bin/tests/system/mkeys/tests.sh | 55 +++++++++++++++++++
|
|
|
302b22 |
lib/dns/include/dst/dst.h | 3 +-
|
|
|
302b22 |
lib/dns/zone.c | 27 ++++++++-
|
|
|
302b22 |
14 files changed, 229 insertions(+), 15 deletions(-)
|
|
|
302b22 |
create mode 100644 bin/tests/system/mkeys/ns1/unsupported.key
|
|
|
302b22 |
create mode 100644 bin/tests/system/mkeys/ns6/named.args
|
|
|
302b22 |
create mode 100644 bin/tests/system/mkeys/ns6/named.conf.in
|
|
|
302b22 |
create mode 100644 bin/tests/system/mkeys/ns6/setup.sh
|
|
|
302b22 |
create mode 100644 bin/tests/system/mkeys/ns6/unsupported-managed.key
|
|
|
302b22 |
create mode 100644 bin/tests/system/mkeys/ns7/named.conf.in
|
|
|
302b22 |
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/README b/bin/tests/system/mkeys/README
|
|
|
302b22 |
index 700e6c21ca..257ef5406f 100644
|
|
|
302b22 |
--- a/bin/tests/system/mkeys/README
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/README
|
|
|
302b22 |
@@ -16,3 +16,6 @@ ns3 is a validator with a broken key in managed-keys.
|
|
|
302b22 |
|
|
|
302b22 |
ns5 is a validator which is prevented from getting a response from the
|
|
|
302b22 |
root server, causing key refresh queries to fail.
|
|
|
302b22 |
+
|
|
|
302b22 |
+ns6 is a validator which has unsupported algorithms, one at start up,
|
|
|
302b22 |
+one because of an algorithm rollover.
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/clean.sh b/bin/tests/system/mkeys/clean.sh
|
|
|
302b22 |
index 17bd50f273..844d813eb4 100644
|
|
|
302b22 |
--- a/bin/tests/system/mkeys/clean.sh
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/clean.sh
|
|
|
302b22 |
@@ -11,6 +11,7 @@
|
|
|
302b22 |
|
|
|
302b22 |
rm -f */K* */*.signed */trusted.conf */*.jnl */*.bk
|
|
|
302b22 |
rm -f dsset-. ns1/dsset-.
|
|
|
302b22 |
+rm -f ns1/zone.key
|
|
|
302b22 |
rm -f ns*/named.lock
|
|
|
302b22 |
rm -f */managed-keys.bind* */named.secroots
|
|
|
302b22 |
rm -f */managed.conf ns1/managed.key ns1/managed.key.id
|
|
|
302b22 |
@@ -19,3 +20,4 @@ rm -f dig.out* delv.out* rndc.out* signer.out*
|
|
|
302b22 |
rm -f ns1/named.secroots ns1/root.db.signed* ns1/root.db.tmp
|
|
|
302b22 |
rm -f */named.conf
|
|
|
302b22 |
rm -f ns5/named.args
|
|
|
302b22 |
+rm -f ns7/view1.mkeys ns7/view2.mkeys
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/ns1/root.db b/bin/tests/system/mkeys/ns1/root.db
|
|
|
302b22 |
index 6ba922af09..0070f13942 100644
|
|
|
302b22 |
--- a/bin/tests/system/mkeys/ns1/root.db
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/ns1/root.db
|
|
|
302b22 |
@@ -8,16 +8,16 @@
|
|
|
302b22 |
; information regarding copyright ownership.
|
|
|
302b22 |
|
|
|
302b22 |
$TTL 20
|
|
|
302b22 |
-. IN SOA gson.nominum.com. a.root.servers.nil. (
|
|
|
302b22 |
- 2000042100 ; serial
|
|
|
302b22 |
- 600 ; refresh
|
|
|
302b22 |
- 600 ; retry
|
|
|
302b22 |
- 1200 ; expire
|
|
|
302b22 |
- 2 ; minimum
|
|
|
302b22 |
- )
|
|
|
302b22 |
-. NS a.root-servers.nil.
|
|
|
302b22 |
-a.root-servers.nil. A 10.53.0.1
|
|
|
302b22 |
+. IN SOA gson.nominum.com. a.root.servers.nil. (
|
|
|
302b22 |
+ 2000042100 ; serial
|
|
|
302b22 |
+ 600 ; refresh
|
|
|
302b22 |
+ 600 ; retry
|
|
|
302b22 |
+ 1200 ; expire
|
|
|
302b22 |
+ 2 ; minimum
|
|
|
302b22 |
+ )
|
|
|
302b22 |
+. NS a.root-servers.nil.
|
|
|
302b22 |
+a.root-servers.nil. A 10.53.0.1
|
|
|
302b22 |
|
|
|
302b22 |
; no delegation
|
|
|
302b22 |
|
|
|
302b22 |
-example. TXT "This is a test."
|
|
|
302b22 |
+example. TXT "This is a test."
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/ns1/sign.sh b/bin/tests/system/mkeys/ns1/sign.sh
|
|
|
302b22 |
index ccc7889ad9..e5e7ec05d6 100644
|
|
|
302b22 |
--- a/bin/tests/system/mkeys/ns1/sign.sh
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/ns1/sign.sh
|
|
|
302b22 |
@@ -25,13 +25,18 @@ keyfile_to_managed_keys $keyname > managed.conf
|
|
|
302b22 |
cp managed.conf ../ns2/managed.conf
|
|
|
302b22 |
cp managed.conf ../ns5/managed.conf
|
|
|
302b22 |
|
|
|
302b22 |
-# Configure a trusted key statement (used by delv)
|
|
|
302b22 |
+# Configure a trusted key statement (used by delv).
|
|
|
302b22 |
keyfile_to_trusted_keys $keyname > trusted.conf
|
|
|
302b22 |
|
|
|
302b22 |
+# Prepare an unsupported algorithm key.
|
|
|
302b22 |
+unsupportedkey=Kunknown.+255+00000
|
|
|
302b22 |
+cp unsupported.key "${unsupportedkey}.key"
|
|
|
302b22 |
+
|
|
|
302b22 |
#
|
|
|
302b22 |
# Save keyname and keyid for managed key id test.
|
|
|
302b22 |
#
|
|
|
302b22 |
echo "$keyname" > managed.key
|
|
|
302b22 |
+echo "$zskkeyname" > zone.key
|
|
|
302b22 |
keyid=`expr $keyname : 'K\.+00.+\([0-9]*\)'`
|
|
|
302b22 |
keyid=`expr $keyid + 0`
|
|
|
302b22 |
echo "$keyid" > managed.key.id
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/ns1/unsupported.key b/bin/tests/system/mkeys/ns1/unsupported.key
|
|
|
302b22 |
new file mode 100644
|
|
|
302b22 |
index 0000000000..7435d03b63
|
|
|
302b22 |
--- /dev/null
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/ns1/unsupported.key
|
|
|
302b22 |
@@ -0,0 +1 @@
|
|
|
302b22 |
+. IN DNSKEY 257 3 255 BJiXuidPHuGIne8GlCBLG+Oq/FZruQd2s3uBo+SxY16NUP/Vwl8MctMK62KsblDU1gIJAdEMVep2tsOkuSm0bIbJ8NBex+N9rSvzH2YJlDCT9QnNfv4q5RRTcVA3lk9nkmWHo6zcAT33yuS+THOCSznOMCJRq8JGZ6xqMJLv9FucuK6CCe6QBAZ5e98dpyGTWQLu7AERKKFqda9YCk3KQfdzx/HZ4SpQpRLncIXvGm1PIMT8Ar95NB/BsFJGwr5ZTaQtRYOXf2DD7wD3pfMsTJCdZyC0J0EtGBG109I+Oou1cswUfqZLXip/aV3eaBAUqLcZpg8P8vAbrvEq4uMS4OMZeXL6nu0irrdS1Pqmax8RsC+x3fg9EBH3QmHroJZtiU5h+0x4qApp7HE4Z5zFRuxIp9iB
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/ns6/named.args b/bin/tests/system/mkeys/ns6/named.args
|
|
|
302b22 |
new file mode 100644
|
|
|
302b22 |
index 0000000000..02f8f670f6
|
|
|
302b22 |
--- /dev/null
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/ns6/named.args
|
|
|
302b22 |
@@ -0,0 +1 @@
|
|
|
302b22 |
+-m record,size,mctx -T clienttest -c named.conf -d 99 -X named.lock -g -T mkeytimers=5/10/20
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/ns6/named.conf.in b/bin/tests/system/mkeys/ns6/named.conf.in
|
|
|
302b22 |
new file mode 100644
|
|
|
302b22 |
index 0000000000..8d76f7f2e7
|
|
|
302b22 |
--- /dev/null
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/ns6/named.conf.in
|
|
|
302b22 |
@@ -0,0 +1,43 @@
|
|
|
302b22 |
+/*
|
|
|
302b22 |
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
|
302b22 |
+ *
|
|
|
302b22 |
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
302b22 |
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
302b22 |
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
302b22 |
+ *
|
|
|
302b22 |
+ * See the COPYRIGHT file distributed with this work for additional
|
|
|
302b22 |
+ * information regarding copyright ownership.
|
|
|
302b22 |
+ */
|
|
|
302b22 |
+
|
|
|
302b22 |
+// NS6
|
|
|
302b22 |
+
|
|
|
302b22 |
+options {
|
|
|
302b22 |
+ query-source address 10.53.0.6;
|
|
|
302b22 |
+ notify-source 10.53.0.6;
|
|
|
302b22 |
+ transfer-source 10.53.0.6;
|
|
|
302b22 |
+ port @PORT@;
|
|
|
302b22 |
+ pid-file "named.pid";
|
|
|
302b22 |
+ listen-on { 10.53.0.6; };
|
|
|
302b22 |
+ listen-on-v6 { none; };
|
|
|
302b22 |
+ recursion yes;
|
|
|
302b22 |
+ notify no;
|
|
|
302b22 |
+ dnssec-enable yes;
|
|
|
302b22 |
+ dnssec-validation yes;
|
|
|
302b22 |
+ trust-anchor-telemetry no;
|
|
|
302b22 |
+};
|
|
|
302b22 |
+
|
|
|
302b22 |
+key rndc_key {
|
|
|
302b22 |
+ secret "1234abcd8765";
|
|
|
302b22 |
+ algorithm hmac-sha256;
|
|
|
302b22 |
+};
|
|
|
302b22 |
+
|
|
|
302b22 |
+controls {
|
|
|
302b22 |
+ inet 10.53.0.6 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
|
|
|
302b22 |
+};
|
|
|
302b22 |
+
|
|
|
302b22 |
+zone "." {
|
|
|
302b22 |
+ type hint;
|
|
|
302b22 |
+ file "../../common/root.hint";
|
|
|
302b22 |
+};
|
|
|
302b22 |
+
|
|
|
302b22 |
+include "managed.conf";
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/ns6/setup.sh b/bin/tests/system/mkeys/ns6/setup.sh
|
|
|
302b22 |
new file mode 100644
|
|
|
302b22 |
index 0000000000..5ba1647da5
|
|
|
302b22 |
--- /dev/null
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/ns6/setup.sh
|
|
|
302b22 |
@@ -0,0 +1,30 @@
|
|
|
302b22 |
+#!/bin/sh -e
|
|
|
302b22 |
+#
|
|
|
302b22 |
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
|
302b22 |
+#
|
|
|
302b22 |
+# This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
302b22 |
+# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
302b22 |
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
302b22 |
+#
|
|
|
302b22 |
+# See the COPYRIGHT file distributed with this work for additional
|
|
|
302b22 |
+# information regarding copyright ownership.
|
|
|
302b22 |
+
|
|
|
302b22 |
+SYSTEMTESTTOP=../..
|
|
|
302b22 |
+. $SYSTEMTESTTOP/conf.sh
|
|
|
302b22 |
+
|
|
|
302b22 |
+zone=.
|
|
|
302b22 |
+zonefile=root.db
|
|
|
302b22 |
+
|
|
|
302b22 |
+# an RSA key
|
|
|
302b22 |
+rsakey=`$KEYGEN -a rsasha256 -qfk rsasha256.`
|
|
|
302b22 |
+
|
|
|
302b22 |
+# a key with unsupported algorithm
|
|
|
302b22 |
+unsupportedkey=Kunknown.+255+00000
|
|
|
302b22 |
+cp unsupported-managed.key "${unsupportedkey}.key"
|
|
|
302b22 |
+
|
|
|
302b22 |
+# root key
|
|
|
302b22 |
+rootkey=`cat ../ns1/managed.key`
|
|
|
302b22 |
+cp "../ns1/${rootkey}.key" .
|
|
|
302b22 |
+
|
|
|
302b22 |
+# Configure the resolving server with a managed trusted key.
|
|
|
302b22 |
+keyfile_to_managed_keys $unsupportedkey $rsakey $rootkey > managed.conf
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/ns6/unsupported-managed.key b/bin/tests/system/mkeys/ns6/unsupported-managed.key
|
|
|
302b22 |
new file mode 100644
|
|
|
302b22 |
index 0000000000..be872a00f0
|
|
|
302b22 |
--- /dev/null
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/ns6/unsupported-managed.key
|
|
|
302b22 |
@@ -0,0 +1 @@
|
|
|
302b22 |
+unsupported. IN DNSKEY 257 3 255 BOOVAhiJDPqhfU7+yGXjhetrtC/rtjmwO1yo52BUHUd8R4hQ/ZPdYCVvQlvNkRxDblPkFM5YRXkesS30pJSoNYrg+djbMNumJrLG+lbhFIc/ahTjlYOxb1zm2z00ubHju/1uGBifiRvKWSK0Vr0u6NtS4PKZfsnXt+piSHiRAHSfkjGHwqPYYKh9EUW12kJmIzlMaM6WYl+gJOvL+f8VqNLtvsMPT6OPK/3h/Dnfnxyeudp/jzAnNDDiTgX2XfzIXB4UwxtzIOGaHLnprpNf3zoBm0kyaEdSQQ/qKkpCOqjBasYEHRjVz3RncPUkdLr7PQuPBfFDr3SUMMJqufJrO4IJjtD4cCBT7K1i39Jg471nEzU1vkPzxF+Rw1QHT4nZaXbltf3BEZGS4Knoe9XPwi5KjGW6
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/ns7/named.conf.in b/bin/tests/system/mkeys/ns7/named.conf.in
|
|
|
302b22 |
new file mode 100644
|
|
|
302b22 |
index 0000000000..a9aba00733
|
|
|
302b22 |
--- /dev/null
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/ns7/named.conf.in
|
|
|
302b22 |
@@ -0,0 +1,50 @@
|
|
|
302b22 |
+/*
|
|
|
302b22 |
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
|
|
302b22 |
+ *
|
|
|
302b22 |
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
302b22 |
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
302b22 |
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
302b22 |
+ *
|
|
|
302b22 |
+ * See the COPYRIGHT file distributed with this work for additional
|
|
|
302b22 |
+ * information regarding copyright ownership.
|
|
|
302b22 |
+ */
|
|
|
302b22 |
+
|
|
|
302b22 |
+// NS7
|
|
|
302b22 |
+
|
|
|
302b22 |
+options {
|
|
|
302b22 |
+ query-source address 10.53.0.7;
|
|
|
302b22 |
+ notify-source 10.53.0.7;
|
|
|
302b22 |
+ transfer-source 10.53.0.7;
|
|
|
302b22 |
+ port @PORT@;
|
|
|
302b22 |
+ pid-file "named.pid";
|
|
|
302b22 |
+ listen-on { 10.53.0.7; };
|
|
|
302b22 |
+ listen-on-v6 { none; };
|
|
|
302b22 |
+ recursion yes;
|
|
|
302b22 |
+ notify no;
|
|
|
302b22 |
+ dnssec-enable yes;
|
|
|
302b22 |
+ dnssec-validation auto;
|
|
|
302b22 |
+ bindkeys-file "managed.conf";
|
|
|
302b22 |
+};
|
|
|
302b22 |
+
|
|
|
302b22 |
+key rndc_key {
|
|
|
302b22 |
+ secret "1234abcd8765";
|
|
|
302b22 |
+ algorithm hmac-sha256;
|
|
|
302b22 |
+};
|
|
|
302b22 |
+
|
|
|
302b22 |
+controls {
|
|
|
302b22 |
+ inet 10.53.0.7 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
|
|
|
302b22 |
+};
|
|
|
302b22 |
+
|
|
|
302b22 |
+view view1 {
|
|
|
302b22 |
+ zone "." {
|
|
|
302b22 |
+ type hint;
|
|
|
302b22 |
+ file "../../common/root.hint";
|
|
|
302b22 |
+ };
|
|
|
302b22 |
+};
|
|
|
302b22 |
+
|
|
|
302b22 |
+view view2 {
|
|
|
302b22 |
+ zone "." {
|
|
|
302b22 |
+ type hint;
|
|
|
302b22 |
+ file "../../common/root.hint";
|
|
|
302b22 |
+ };
|
|
|
302b22 |
+};
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/setup.sh b/bin/tests/system/mkeys/setup.sh
|
|
|
302b22 |
index bd3169f9b6..100a86959b 100644
|
|
|
302b22 |
--- a/bin/tests/system/mkeys/setup.sh
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/setup.sh
|
|
|
302b22 |
@@ -25,3 +25,4 @@ copy_setports ns5/named.conf.in ns5/named.conf
|
|
|
302b22 |
cp ns5/named1.args ns5/named.args
|
|
|
302b22 |
|
|
|
302b22 |
( cd ns1 && $SHELL sign.sh )
|
|
|
302b22 |
+( cd ns6 && $SHELL setup.sh )
|
|
|
302b22 |
diff --git a/bin/tests/system/mkeys/tests.sh b/bin/tests/system/mkeys/tests.sh
|
|
|
302b22 |
index f65f49e98d..b8410902d7 100644
|
|
|
302b22 |
--- a/bin/tests/system/mkeys/tests.sh
|
|
|
302b22 |
+++ b/bin/tests/system/mkeys/tests.sh
|
|
|
302b22 |
@@ -701,6 +701,8 @@ rm -f ns1/root.db.signed.jnl
|
|
|
302b22 |
nextpart ns5/named.run > /dev/null
|
|
|
302b22 |
mkeys_reconfig_on 1
|
|
|
302b22 |
wait_for_log "Returned from key fetch in keyfetch_done() for '.': success" ns5/named.run
|
|
|
302b22 |
+#mkeys_secroots_on 5
|
|
|
302b22 |
+#grep '; managed' ns5/named.secroots > /dev/null || ret=1
|
|
|
302b22 |
# ns1 should not longer REFUSE queries from ns5, so managed keys should be
|
|
|
302b22 |
# correctly refreshed and resolving should succeed
|
|
|
302b22 |
$DIG $DIGOPTS +noauth example. @10.53.0.5 txt > dig.out.ns5.b.test$n || ret=1
|
|
|
302b22 |
@@ -710,5 +712,58 @@ grep "status: NOERROR" dig.out.ns5.b.test$n > /dev/null || ret=1
|
|
|
302b22 |
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
|
302b22 |
status=`expr $status + $ret`
|
|
|
302b22 |
|
|
|
302b22 |
+echo_i "reinitialize trust anchors, add unsupported algorithm ($n)"
|
|
|
302b22 |
+ret=0
|
|
|
302b22 |
+$PERL $SYSTEMTESTTOP/stop.pl --use-rndc --port ${CONTROLPORT} mkeys ns6
|
|
|
302b22 |
+rm -f ns6/managed-keys.bind*
|
|
|
302b22 |
+nextpart ns6/named.run > /dev/null
|
|
|
302b22 |
+$PERL $SYSTEMTESTTOP/start.pl --noclean --restart --port ${PORT} mkeys ns6
|
|
|
302b22 |
+# log when an unsupported algorithm is encountered during startup
|
|
|
302b22 |
+wait_for_log "skipping managed key for 'unsupported\.': algorithm is unsupported" ns6/named.run
|
|
|
302b22 |
+if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
|
302b22 |
+status=`expr $status + $ret`
|
|
|
302b22 |
+
|
|
|
302b22 |
+n=`expr $n + 1`
|
|
|
302b22 |
+echo_i "skipping unsupported algorithm in managed-keys ($n)"
|
|
|
302b22 |
+ret=0
|
|
|
302b22 |
+mkeys_status_on 6 > rndc.out.$n 2>&1
|
|
|
302b22 |
+# there should still be only two keys listed (for . and rsasha256.)
|
|
|
302b22 |
+count=`grep -c "keyid: " rndc.out.$n`
|
|
|
302b22 |
+[ "$count" -eq 2 ] || ret=1
|
|
|
302b22 |
+# two lines indicating trust status
|
|
|
302b22 |
+count=`grep -c "trust" rndc.out.$n`
|
|
|
302b22 |
+[ "$count" -eq 2 ] || ret=1
|
|
|
302b22 |
+
|
|
|
302b22 |
+n=`expr $n + 1`
|
|
|
302b22 |
+echo_i "introduce unsupported algorithm rollover in authoritative zone ($n)"
|
|
|
302b22 |
+ret=0
|
|
|
302b22 |
+cp ns1/root.db ns1/root.db.orig
|
|
|
302b22 |
+ksk=`cat ns1/managed.key`
|
|
|
302b22 |
+zsk=`cat ns1/zone.key`
|
|
|
302b22 |
+cat "ns1/${ksk}.key" "ns1/${zsk}.key" ns1/unsupported.key >> ns1/root.db
|
|
|
302b22 |
+grep "\..*IN.*DNSKEY.*257 3 255" ns1/root.db > /dev/null || ret=1
|
|
|
302b22 |
+$SIGNER -K ns1 -N unixtime -o . ns1/root.db $ksk $zsk > /dev/null 2>/dev/null || ret=1
|
|
|
302b22 |
+grep "DNSKEY.*257 3 255" ns1/root.db.signed > /dev/null || ret=1
|
|
|
302b22 |
+cp ns1/root.db.orig ns1/root.db
|
|
|
302b22 |
+if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
|
302b22 |
+status=`expr $status + $ret`
|
|
|
302b22 |
+
|
|
|
302b22 |
+n=`expr $n + 1`
|
|
|
302b22 |
+echo_i "skipping unsupported algorithm in rollover ($n)"
|
|
|
302b22 |
+ret=0
|
|
|
302b22 |
+mkeys_reload_on 1
|
|
|
302b22 |
+mkeys_refresh_on 6
|
|
|
302b22 |
+mkeys_status_on 6 > rndc.out.$n 2>&1
|
|
|
302b22 |
+# there should still be only two keys listed (for . and rsasha256.)
|
|
|
302b22 |
+count=`grep -c "keyid: " rndc.out.$n`
|
|
|
302b22 |
+[ "$count" -eq 2 ] || ret=1
|
|
|
302b22 |
+# two lines indicating trust status
|
|
|
302b22 |
+count=`grep -c "trust" rndc.out.$n`
|
|
|
302b22 |
+[ "$count" -eq 2 ] || ret=1
|
|
|
302b22 |
+# log when an unsupported algorithm is encountered during rollover
|
|
|
302b22 |
+wait_for_log "Cannot compute tag for key in zone \.: algorithm is unsupported" ns6/named.run
|
|
|
302b22 |
+if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
|
302b22 |
+status=`expr $status + $ret`
|
|
|
302b22 |
+
|
|
|
302b22 |
echo_i "exit status: $status"
|
|
|
302b22 |
[ $status -eq 0 ] || exit 1
|
|
|
302b22 |
diff --git a/lib/dns/include/dst/dst.h b/lib/dns/include/dst/dst.h
|
|
|
302b22 |
index e8c1a3c287..91f4a6e300 100644
|
|
|
302b22 |
--- a/lib/dns/include/dst/dst.h
|
|
|
302b22 |
+++ b/lib/dns/include/dst/dst.h
|
|
|
302b22 |
@@ -67,8 +67,7 @@ typedef struct dst_context dst_context_t;
|
|
|
302b22 |
#define DST_ALG_HMACSHA512 165 /* XXXMPA */
|
|
|
302b22 |
#define DST_ALG_INDIRECT 252
|
|
|
302b22 |
#define DST_ALG_PRIVATE 254
|
|
|
302b22 |
-#define DST_ALG_EXPAND 255
|
|
|
302b22 |
-#define DST_MAX_ALGS 255
|
|
|
302b22 |
+#define DST_MAX_ALGS 256
|
|
|
302b22 |
|
|
|
302b22 |
/*% A buffer of this size is large enough to hold any key */
|
|
|
302b22 |
#define DST_KEY_MAXSIZE 1280
|
|
|
302b22 |
diff --git a/lib/dns/zone.c b/lib/dns/zone.c
|
|
|
302b22 |
index 055b2417eb..96c98d585c 100644
|
|
|
302b22 |
--- a/lib/dns/zone.c
|
|
|
302b22 |
+++ b/lib/dns/zone.c
|
|
|
302b22 |
@@ -3903,9 +3903,10 @@ compute_tag(dns_name_t *name, dns_rdata_dnskey_t *dnskey, isc_mem_t *mctx,
|
|
|
302b22 |
dns_rdatatype_dnskey, dnskey, &buffer);
|
|
|
302b22 |
|
|
|
302b22 |
result = dns_dnssec_keyfromrdata(name, &rdata, mctx, &dstkey);
|
|
|
302b22 |
- if (result == ISC_R_SUCCESS)
|
|
|
302b22 |
+ if (result == ISC_R_SUCCESS) {
|
|
|
302b22 |
*tag = dst_key_id(dstkey);
|
|
|
302b22 |
- dst_key_free(&dstkey);
|
|
|
302b22 |
+ dst_key_free(&dstkey);
|
|
|
302b22 |
+ }
|
|
|
302b22 |
|
|
|
302b22 |
return (result);
|
|
|
302b22 |
}
|
|
|
302b22 |
@@ -9364,6 +9365,17 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|
|
302b22 |
|
|
|
302b22 |
dns_keydata_todnskey(&keydata, &dnskey, NULL);
|
|
|
302b22 |
result = compute_tag(keyname, &dnskey, mctx, &keytag);
|
|
|
302b22 |
+ if (result != ISC_R_SUCCESS) {
|
|
|
302b22 |
+ /*
|
|
|
302b22 |
+ * Skip if we cannot compute the key tag.
|
|
|
302b22 |
+ * This may happen if the algorithm is unsupported
|
|
|
302b22 |
+ */
|
|
|
302b22 |
+ dns_zone_log(zone, ISC_LOG_ERROR,
|
|
|
302b22 |
+ "Cannot compute tag for key in zone %s: %s "
|
|
|
302b22 |
+ "(skipping)",
|
|
|
302b22 |
+ namebuf, dns_result_totext(result));
|
|
|
302b22 |
+ continue;
|
|
|
302b22 |
+ }
|
|
|
302b22 |
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
|
|
302b22 |
|
|
|
302b22 |
/*
|
|
|
302b22 |
@@ -9475,6 +9487,17 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
|
|
|
302b22 |
continue;
|
|
|
302b22 |
|
|
|
302b22 |
result = compute_tag(keyname, &dnskey, mctx, &keytag);
|
|
|
302b22 |
+ if (result != ISC_R_SUCCESS) {
|
|
|
302b22 |
+ /*
|
|
|
302b22 |
+ * Skip if we cannot compute the key tag.
|
|
|
302b22 |
+ * This may happen if the algorithm is unsupported
|
|
|
302b22 |
+ */
|
|
|
302b22 |
+ dns_zone_log(zone, ISC_LOG_ERROR,
|
|
|
302b22 |
+ "Cannot compute tag for key in zone %s: %s "
|
|
|
302b22 |
+ "(skipping)",
|
|
|
302b22 |
+ namebuf, dns_result_totext(result));
|
|
|
302b22 |
+ continue;
|
|
|
302b22 |
+ }
|
|
|
302b22 |
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
|
|
302b22 |
|
|
|
302b22 |
revoked = ISC_TF(dnskey.flags & DNS_KEYFLAG_REVOKE);
|
|
|
302b22 |
--
|
|
|
302b22 |
2.20.1
|
|
|
302b22 |
|