hickory-proto: NSEC3 closest-encloser proof validation enters unbounded loop on cross-zone responses
Severity and exploitation
KEV coverage does not rule out exploitation.
Assessment vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NAssessment vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NAssessment vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HSeverity
high8.7CVSS measures technical severity, not the likelihood of an attack.
Known exploitation
Not listed in the checked CISA KEV catalog
Absence from CISA KEV does not rule out attacks.
Public exploit
Not established by this record
Missing evidence does not mean no public exploit exists.
Remediation
Package fixes recorded
Fix versions are recorded for 2 of 2 mapped packages. Check each release branch and any separate product guidance.
What this means
The NSEC3 closest-encloser proof validation in hickory-proto's DnssecDnsHandle walks from the QNAME up to the SOA owner name, building a list of candidate encloser names. The iterator used assumes the QNAME is a descendant of the SOA owner, terminating only when the current candidate equals the SOA name. When the SOA in a response's authority section is not an ancestor of the QNAME, the loop stalls at the DNS root and never terminates, repeatedly calling Name::base_name() and pushing newly allocated Name and hashed-name entries into the candidate Vec.
Source excerpt · OSVAttack conditions
It is triggered while validating a NoData or NXDomain response whose authority section contains an SOA record from a zone other than an ancestor of the QNAME, on a code path that requires NSEC3 closest-encloser proof.
Excerpt from the original source description below.
Review supporting sources →Affected versions
Check the exact model, release, and any platform requirements against your installation.
hickory-dns · VulnCheck
hickory-dns
1 range
hickory-dns · VulnCheck
hickory-dns
Package identity
pkg:cargo/hickory-protoExplore hickory-proto →Identity supplied by VulnCheck. Version matching requires compatible range evidence.
Compare with this publisher’s ranges. This does not inspect your installation.
affected
0.25.0-alpha.3 → through 0.25.2
semver versions
Other versions: unaffected
hickory-dns · VulnCheck
hickory-dns
2 ranges
hickory-dns · VulnCheck
hickory-dns
Package identity
pkg:cargo/hickory-netExplore hickory-net →Identity supplied by VulnCheck. Version matching requires compatible range evidence.
Compare with this publisher’s ranges. This does not inspect your installation.
affected
0.26.0-alpha.1 → before 0.26.1
semver versions
unaffected
0.26.1
semver versions
Other versions: unaffected
Packages
Compare each installed version with the publisher’s affected ranges. Where a fix is recorded, choose the appropriate release branch and test compatibility before upgrading.
| Affected range | Recorded fix |
|---|---|
| From 0.25.0-alpha.3 through 0.25.2 (inclusive)Semantic versions | Not recorded |
| From 0.25.0-alpha.3 before 0.26.0-beta.1Semantic versions | 0.26.0-beta.1 |
Version evidence: OSV · GHSA-3v94-mw7p-v465OSV · RUSTSEC-2026-0118
View original version evidence (0 explicit versions)
| Affected range | Recorded fix |
|---|---|
| From 0.26.0-alpha.1 before 0.26.1Semantic versions | 0.26.1 |
| From 0.0.0-0 before 0.26.1Semantic versions | 0.26.1 |
Version evidence: OSV · GHSA-3v94-mw7p-v465OSV · RUSTSEC-2026-0120
View original version evidence (0 explicit versions)
What to do
Compare your installed product and version with the affected versions above. A matching product name alone does not confirm exposure.
Use the recorded fix for your release branch. Review the publisher’s instructions and test compatibility before upgrading.
cve.new guidance unless attributed to a publisher. This page does not inspect your installation.
Public exploit evidence
No public exploit reference is identified in the imported evidence. This is not a claim that no exploit exists.
Original source description
Read the full publisher description
The NSEC3 closest-encloser proof validation in hickory-proto's
DnssecDnsHandle walks from the QNAME up to the SOA owner name, building a
list of candidate encloser names. The iterator used assumes the
QNAME is a descendant of the SOA owner, terminating only when the current
candidate equals the SOA name. When the SOA in a response's authority section
is not an ancestor of the QNAME, the loop stalls at the DNS root and never
terminates, repeatedly calling Name::base_name() and pushing newly allocated
Name and hashed-name entries into the candidate Vec.
The bug is reachable by any caller of DnssecDnsHandle — including the
resolver, recursor, and client — when built with the dnssec-ring or
dnssec-aws-lc-rs feature and configured to perform DNSSEC validation. It is
triggered while validating a NoData or NXDomain response whose authority
section contains an SOA record from a zone other than an ancestor of the
QNAME, on a code path that requires NSEC3 closest-encloser proof. In practice
this can be reached through an insecure CNAME chain that crosses zone
boundaries into a DNSSEC-signed zone returning NoData, but the minimum
condition is just a mismatched SOA owner on a response requiring NSEC3
validation.
A debug_assert_ne!(name, Name::root()) guards the loop body, so debug builds
abort with a panic on the first iteration past the root. Release builds
compile the assertion out and run the loop unbounded, allocating until the
process exhausts available memory (OOM). A reachable upstream attacker who
can return such a response can therefore crash a debug-built validator or
exhaust memory on a release-built one.
The affected code was migrated from hickory-proto to hickory-net as part of
the 0.26.0 release. The hickory-proto 0.26.x release no longer offers
DnssecDnsHandle and so we recommend all affected users update to hickory-net
0.26.1 when the implementation of that type is required.
References
8 sourcesInside the record
Evidence available
Describes the evidence in this view, not whether the product is safe.
Original records
CVE-2026-123607View the latest unmodified CVE JSON from the official source. It may be newer than this imported page.
cve.new JSON →Underlying weaknesses
The source’s classification of what caused the vulnerability.
Contributing organizations · 2
Assigning organization
Additional data publisher
Timeline
All times UTCAdvisory published
Publication date supplied by the source.
Source updated
Latest modification date supplied by the source.
Last imported by cve.new
Latest catalog import, not the date we first saw this advisory.
What changed
Follow changes- CVE · CVE-2026-123607
Observed 2026-11-13T07:16:31.110Z · upstream updated 2026-11-13T03:11:42.671Z
Prioritization updated
before
[]
after
[ { "source": "CISA-ADP", "type": "SSVC", "role": "CISA Coordinator", "timestamp": "2026-11-13T03:11:32.756799Z", "decisions": [ { "name": "Exploitation", "value": "none" }, { "name": "Automatable", "value": "yes" }, { "name": "Technical Impact", "value": "partial" } ] } ]
Large field values are marked as truncated previews. Original source snapshots remain retained.
Showing up to 50 most recent observed changes.