2828. [security] Cached CNAME or DNAME RR could be returned to clients
without DNSSEC validation. [RT #20737] 9.4-ESV, 9.5.3, 9.6.2, 9.7.0, 9.8.0(?)
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
; PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
; $Id: example.db.in,v 1.21 2009/10/27 23:47:44 tbox Exp $
|
||||
; $Id: example.db.in,v 1.22 2009/12/30 08:02:22 jinmei Exp $
|
||||
|
||||
$TTL 300 ; 5 minutes
|
||||
@ IN SOA mname1. . (
|
||||
@@ -36,6 +36,9 @@ d A 10.0.0.4
|
||||
foo TXT "testing"
|
||||
foo A 10.0.1.0
|
||||
|
||||
bad-cname CNAME a
|
||||
bad-dname DNAME @
|
||||
|
||||
; Used for testing CNAME queries
|
||||
cname1 CNAME cname1-target
|
||||
cname1-target TXT "testing cname"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
# $Id: sign.sh,v 1.35 2009/10/28 00:27:10 marka Exp $
|
||||
# $Id: sign.sh,v 1.36 2009/12/30 08:02:22 jinmei Exp $
|
||||
|
||||
SYSTEMTESTTOP=../..
|
||||
. $SYSTEMTESTTOP/conf.sh
|
||||
@@ -43,6 +43,53 @@ cat $infile $keyname1.key $keyname2.key >$zonefile
|
||||
|
||||
$SIGNER -P -g -r $RANDFILE -o $zone -k $keyname1 $zonefile $keyname2 > /dev/null
|
||||
|
||||
#
|
||||
# lower/uppercase the signature bits with the exception of the last characters
|
||||
# changing the last 4 characters will lead to a bad base64 encoding.
|
||||
#
|
||||
$CHECKZONE -D -q -i local $zone $zonefile.signed |
|
||||
awk '
|
||||
tolower($1) == "bad-cname.example." && $4 == "RRSIG" && $5 == "CNAME" {
|
||||
for (i = 1; i <= NF; i++ ) {
|
||||
if (i <= 12) {
|
||||
printf("%s ", $i);
|
||||
continue;
|
||||
}
|
||||
prefix = substr($i, 1, length($i) - 4);
|
||||
suffix = substr($i, length($i) - 4, 4);
|
||||
if (i > 12 && tolower(prefix) != prefix)
|
||||
printf("%s%s", tolower(prefix), suffix);
|
||||
else if (i > 12 && toupper(prefix) != prefix)
|
||||
printf("%s%s", toupper(prefix), suffix);
|
||||
else
|
||||
printf("%s%s ", prefix, suffix);
|
||||
}
|
||||
printf("\n");
|
||||
next;
|
||||
}
|
||||
|
||||
tolower($1) == "bad-dname.example." && $4 == "RRSIG" && $5 == "DNAME" {
|
||||
for (i = 1; i <= NF; i++ ) {
|
||||
if (i <= 12) {
|
||||
printf("%s ", $i);
|
||||
continue;
|
||||
}
|
||||
prefix = substr($i, 1, length($i) - 4);
|
||||
suffix = substr($i, length($i) - 4, 4);
|
||||
if (i > 12 && tolower(prefix) != prefix)
|
||||
printf("%s%s", tolower(prefix), suffix);
|
||||
else if (i > 12 && toupper(prefix) != prefix)
|
||||
printf("%s%s", toupper(prefix), suffix);
|
||||
else
|
||||
printf("%s%s ", prefix, suffix);
|
||||
}
|
||||
printf("\n");
|
||||
next;
|
||||
}
|
||||
|
||||
{ print; }' > $zonefile.signed++ && mv $zonefile.signed++ $zonefile.signed
|
||||
|
||||
|
||||
# Sign the privately secure file
|
||||
|
||||
privzone=private.secure.example.
|
||||
|
||||
Reference in New Issue
Block a user