In NLnet Labs Unbound 1.10.0 up to and including 1.25.1, when 'serve-expired: yes' is set together with a 'response-ip: <net> redirect' /'response-ip-data: <net> CNAME <target>' rule (or the RPZ 'rpz-cname-override' equivalent), a remote client who controls any delegated domain can crash the daemon. The serve-expired-client-timeout callback runs a two-pass loop to chase the respip-generated CNAME alias; on the second pass it resets 'aliasrrset' but not 'partialrep'. Later, this inconsistency leads to a NULL pointer dereference and an eventual crash. A malicious actor can exploit the vulnerability by controlling any zone that replies with an A/AAAA record that falls inside the configured response-ip/rpz subnet. By delaying the answer when the previous record has expired, the vulnerable path of 'serve-expired-client-timeout' is taken leading to denial of service via the server crash.
{
"binaries": [
{
"binary_version": "1.13.1-1ubuntu5.15",
"binary_name": "libunbound8"
},
{
"binary_version": "1.13.1-1ubuntu5.15",
"binary_name": "python3-unbound"
},
{
"binary_version": "1.13.1-1ubuntu5.15",
"binary_name": "unbound"
},
{
"binary_version": "1.13.1-1ubuntu5.15",
"binary_name": "unbound-anchor"
},
{
"binary_version": "1.13.1-1ubuntu5.15",
"binary_name": "unbound-host"
}
]
}{
"binaries": [
{
"binary_version": "1.19.2-1ubuntu3.8",
"binary_name": "libunbound8"
},
{
"binary_version": "1.19.2-1ubuntu3.8",
"binary_name": "python3-unbound"
},
{
"binary_version": "1.19.2-1ubuntu3.8",
"binary_name": "unbound"
},
{
"binary_version": "1.19.2-1ubuntu3.8",
"binary_name": "unbound-anchor"
},
{
"binary_version": "1.19.2-1ubuntu3.8",
"binary_name": "unbound-host"
}
]
}{
"binaries": [
{
"binary_version": "1.24.2-1ubuntu2.1",
"binary_name": "libunbound8"
},
{
"binary_version": "1.24.2-1ubuntu2.1",
"binary_name": "python3-unbound"
},
{
"binary_version": "1.24.2-1ubuntu2.1",
"binary_name": "unbound"
},
{
"binary_version": "1.24.2-1ubuntu2.1",
"binary_name": "unbound-anchor"
},
{
"binary_version": "1.24.2-1ubuntu2.1",
"binary_name": "unbound-host"
}
]
}{
"binaries": [
{
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3",
"binary_name": "libunbound2"
},
{
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3",
"binary_name": "python-unbound"
},
{
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3",
"binary_name": "unbound"
},
{
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3",
"binary_name": "unbound-anchor"
},
{
"binary_version": "1.4.22-1ubuntu4.14.04.3+esm3",
"binary_name": "unbound-host"
}
]
}{
"binaries": [
{
"binary_version": "1.5.8-1ubuntu1.1+esm3",
"binary_name": "libunbound2"
},
{
"binary_version": "1.5.8-1ubuntu1.1+esm3",
"binary_name": "python-unbound"
},
{
"binary_version": "1.5.8-1ubuntu1.1+esm3",
"binary_name": "unbound"
},
{
"binary_version": "1.5.8-1ubuntu1.1+esm3",
"binary_name": "unbound-anchor"
},
{
"binary_version": "1.5.8-1ubuntu1.1+esm3",
"binary_name": "unbound-host"
}
]
}{
"binaries": [
{
"binary_version": "1.6.7-1ubuntu2.6+esm4",
"binary_name": "libunbound2"
},
{
"binary_version": "1.6.7-1ubuntu2.6+esm4",
"binary_name": "python-unbound"
},
{
"binary_version": "1.6.7-1ubuntu2.6+esm4",
"binary_name": "python3-unbound"
},
{
"binary_version": "1.6.7-1ubuntu2.6+esm4",
"binary_name": "unbound"
},
{
"binary_version": "1.6.7-1ubuntu2.6+esm4",
"binary_name": "unbound-anchor"
},
{
"binary_version": "1.6.7-1ubuntu2.6+esm4",
"binary_name": "unbound-host"
}
]
}{
"binaries": [
{
"binary_version": "1.9.4-2ubuntu1.11+esm1",
"binary_name": "libunbound8"
},
{
"binary_version": "1.9.4-2ubuntu1.11+esm1",
"binary_name": "python-unbound"
},
{
"binary_version": "1.9.4-2ubuntu1.11+esm1",
"binary_name": "python3-unbound"
},
{
"binary_version": "1.9.4-2ubuntu1.11+esm1",
"binary_name": "unbound"
},
{
"binary_version": "1.9.4-2ubuntu1.11+esm1",
"binary_name": "unbound-anchor"
},
{
"binary_version": "1.9.4-2ubuntu1.11+esm1",
"binary_name": "unbound-host"
}
]
}