+19 December 2011: Wouter
+ - Fix for VU#209659 CVE-2011-4528: Unbound denial of service
+ vulnerabilities from nonstandard redirection and denial of existence
+ http://www.unbound.net/downloads/CVE-2011-4528.txt
+ - robust checks for next-closer NSEC3s.
+ - tag 1.4.14 created.
+
15 December 2011: Wouter
- remove uninit warning from cachedump code.
- Fix parse error on negative SOA RRSIGs if badly ordered in the packet.
size_t* snamelen)
{
if(rrset->rr_count != 1) {
+ struct rr_parse* sig;
verbose(VERB_ALGO, "Found CNAME rrset with "
"size > 1: %u", (unsigned)rrset->rr_count);
/* use the first CNAME! */
rrset->rr_count = 1;
rrset->size = rrset->rr_first->size;
+ for(sig=rrset->rrsig_first; sig; sig=sig->next)
+ rrset->size += sig->size;
rrset->rr_last = rrset->rr_first;
rrset->rr_first->next = NULL;
}
return sec_status_bogus;
}
/* everything is peachy keen, except for optout spans */
- log_assert(ce.nc_rrset);
- if(nsec3_has_optout(ce.nc_rrset, ce.nc_rr)) {
+ if(ce.nc_rrset && nsec3_has_optout(ce.nc_rrset, ce.nc_rr)) {
verbose(VERB_ALGO, "nsec3 nodata proof: matching "
"wildcard is in optout range, insecure");
return sec_status_insecure;
/* Due to forwarders, cnames, and other collating effects, we
* can see the ordinary unsigned data from a zone beneath an
* insecure delegation under an optout here */
+ if(!ce.nc_rrset) {
+ verbose(VERB_ALGO, "nsec3 nodata proof: no next closer nsec3");
+ return sec_status_bogus;
+ }
/* We need to make sure that the covering NSEC3 is opt-out. */
log_assert(ce.nc_rrset);
return sec_status_bogus;
}
+ /* robust extra check */
+ if(!ce.nc_rrset) {
+ verbose(VERB_ALGO, "nsec3 nods proof: no next closer nsec3");
+ *reason = "no NSEC3 next closer";
+ return sec_status_bogus;
+ }
+
/* we had the closest encloser proof, then we need to check that the
* covering NSEC3 was opt-out -- the proveClosestEncloser step already
* checked to see if the closest encloser was a delegation or DNAME.