GHSA-3v94-mw7p-v465: hickory-proto NSEC3 Closest-encloser Proof Validation Enters Vulnerability
HIGHGHSA-3v94-mw7p-v465 is a HIGH nsec3 closest-encloser proof validation enters vulnerability (CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop')) affecting hickory-proto libraries in the crates.io ecosystem. The issue involves nsec3 closest-encloser proof validation enters unbounded loop on cross-zone responses. Remediation is available by upgrading affected packages to version 0.26.1.
GHSA-3v94-mw7p-v465 at a Glance
How to Fix GHSA-3v94-mw7p-v465
To remediate this vulnerability, upgrade all affected hickory-proto dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade hickory-proto to Latest secure release
Upgrade hickory-net to 0.26.1
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for hickory-proto
How to Check if You Are Affected
To determine whether your application is affected by GHSA-3v94-mw7p-v465, inspect your project dependencies for hickory-proto:
inspect dependencies for hickory-proto
Analyze the terminal output to locate any version of hickory-proto in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.26.1), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-835: Loop with Unreachable Exit Condition ('Infinite Loop'), where the product contains an iteration or loop with an exit condition that cannot be reached, i.e., an infinite loop. In hickory-proto, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
GHSA-3v94-mw7p-v465 Affected hickory-proto Versions
2 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
hickory-proto
|
crates.io |
≥ 0.25.0-alpha.3
≤ 0.25.2
|
|
|
hickory-net
|
crates.io |
≥ 0.26.0-alpha.1
< 0.26.1
|
0.26.1
|
References
Frequently Asked Questions
What is GHSA-3v94-mw7p-v465?
Which hickory-proto versions are affected?
What version fixes GHSA-3v94-mw7p-v465?
Is hickory-proto affected?
Is hickory-net affected?
What CWE is associated with GHSA-3v94-mw7p-v465?
How can I check crates.io dependencies for GHSA-3v94-mw7p-v465?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-3v94-mw7p-v465",
"modified" : "2026-05-07T02:59:20Z",
"published" : "2026-05-07T02:59:20Z",
"aliases" : [ ],
"summary" : "hickory-proto: NSEC3 closest-encloser proof validation enters unbounded loop on cross-zone responses",
"details" : "The NSEC3 closest-encloser proof validation in `hickory-proto`'s (0.25.0-alpha.3 ... 0.25.2) and `hickory-net`'s (0.26.0-alpha.1 .. 0.26.0) `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`.\n\nThe 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.\n\nA `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. A reachable upstream attacker who can return such a response can therefore crash a debug build or exhaust memory on a release build, for the affected configurations.\n\nThe affected code was migrated from `hickory-proto` to `hickory-net` as part of the 0.26.0 release. Hickory DNS recommends that all affected users update to `hickory-net` 0.26.1 for the fix.\n\n### Reporter\n\nDavid Cook, ISRG",
"severity" : [ {
"type" : "CVSS_V4",
"score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "crates.io",
"name" : "hickory-proto"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.25.0-alpha.3"
}, {
"last_affected" : "0.25.2"
} ]
} ]
}, {
"package" : {
"ecosystem" : "crates.io",
"name" : "hickory-net"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0.26.0-alpha.1"
}, {
"fixed" : "0.26.1"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 0.26.0"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/hickory-dns/hickory-dns/security/advisories/GHSA-3v94-mw7p-v465"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/hickory-dns/hickory-dns"
}, {
"type" : "WEB",
"url" : "https://rustsec.org/advisories/RUSTSEC-2026-0118.html"
}, {
"type" : "WEB",
"url" : "https://rustsec.org/advisories/RUSTSEC-2026-0120.html"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-835" ],
"severity" : "HIGH",
"github_reviewed" : true,
"github_reviewed_at" : "2026-05-07T02:59:20Z",
"nvd_published_at" : null
}
}