Skip to content

fix(deps): update rust crate hickory-proto to 0.26.0 [security] - #181

Closed
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/crate-hickory-proto-vulnerability
Closed

fix(deps): update rust crate hickory-proto to 0.26.0 [security]#181
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/crate-hickory-proto-vulnerability

Conversation

@renovate

@renovate renovate Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Type Update Change
hickory-proto (source) dependencies minor 0.25.20.26.0

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


hickory-proto vulnerable to CPU exhaustion during message encoding due to O(n²) name compression

GHSA-q2qq-hmj6-3wpp

More information

Details

During message encoding, hickory-proto's BinEncoder stores pointers to labels that are candidates for name compression in a Vec<(usize, Vec<u8>)>. The name compression logic then searches for matches with a linear scan.

A malicious message with many records can both introduce many candidate labels, and invoke this linear scan many times. This can amplify CPU exhaustion in DoS attacks.

This is similar to CVE-2024-8508.

Reporter

Qifan Zhang, Palo Alto Networks

Severity

  • CVSS Score: 6.9 / 10 (Medium)
  • Vector String: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


hickory-proto: NSEC3 closest-encloser proof validation enters unbounded loop on cross-zone responses

GHSA-3v94-mw7p-v465 / RUSTSEC-2026-0118 / RUSTSEC-2026-0120

More information

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.

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. 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.

The 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.

Reporter

David Cook, ISRG

Severity

  • CVSS Score: 8.7 / 10 (High)
  • Vector String: 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

References

This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).


NSEC3 closest-encloser proof validation enters unbounded loop on cross-zone responses

GHSA-3v94-mw7p-v465 / RUSTSEC-2026-0118 / RUSTSEC-2026-0120

More information

Details

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.

Severity

Unknown

References

This data is provided by OSV and the Rust Advisory Database (CC0 1.0).


hickory-proto vulnerable to CPU exhaustion during message encoding due to O(n²) name compression

GHSA-q2qq-hmj6-3wpp / RUSTSEC-2026-0119

More information

Details

During message encoding, hickory-proto's BinEncoder stores pointers to labels that are candidates for name compression in a Vec<(usize, Vec<u8>)>. The name compression logic then searches for matches with a linear scan.

A malicious message with many records can both introduce many candidate labels, and invoke this linear scan many times. This can amplify CPU exhaustion in DoS attacks.

This is similar to CVE-2024-8508.

Reporter

Qifan Zhang, Palo Alto Networks

Severity

  • CVSS Score: 6.9 / 10 (Medium)
  • Vector String: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

References

This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).


CPU exhaustion during message encoding due to O(n²) name compression

GHSA-q2qq-hmj6-3wpp / RUSTSEC-2026-0119

More information

Details

During message encoding, hickory-proto's BinEncoder stores pointers to
labels that are candidates for name compression in a Vec<(usize, Vec<u8>)>.
The name compression logic then searches for matches with a linear scan.

A malicious message with many records can both introduce many candidate labels,
and invoke this linear scan many times. This can amplify CPU exhaustion in DoS
attacks.

This is similar to
CVE-2024-8508.

We recommend all affected users update to hickory-proto 0.26.1 for the fix.

Severity

Unknown

References

This data is provided by OSV and the Rust Advisory Database (CC0 1.0).


Release Notes

hickory-dns/hickory-dns (hickory-proto)

v0.26.1

Compare Source

This point release for the 0.26 release series brings in several bug fixes, and no user-facing changes. Two security reports are addressed:
RUSTSEC-2026-0120 and RUSTSEC-2026-0119.

What's Changed

Full Changelog: hickory-dns/hickory-dns@v0.26.0...v0.26.1

v0.26.0: 0.26.0

Compare Source

13 months after the release of 0.25.0, we finally have a bigger feature release of Hickory DNS, the suite of DNS libraries and authoritative/recursive name servers written in pure Rust. A lot of work has gone into this release, so we wanted to take a moment to release this before we continue work on deploying the Hickory DNS recursive resolver at Let's Encrypt (and did you see that Hickory is being used in some of Google's Pixel devices?). Because of the ongoing work, we expect that 0.27.0 might happen quite a bit sooner than in 13 months from now.

These release notes describe a number of high-level improvements as well as API changes that are likely to break a larger fraction of our downstream users. Feedback (both on these notes and the release itself) is always welcome in our issue tracker or via our Discord server.

Most of the following notes are broken up by specific components: the server binary and our library crates. However, for this release we've made several changes to the structure of our crates itself:

  • Network protocol support has moved out of the hickory-proto crate, into a new hickory-net crate (#​3394); this allows the hickory-proto crate to cleanly focus on message encoding and decoding.
  • The hickory-client crate has been subsumed into hickory-net, in the client module (#​3366). No future releases of the hickory-client crate are expected.
  • The hickory-recursor crate has been merged into hickory-resolver (#​3370), guarded by a recursor feature which must be enabled explicitly. The recursor implementation was already tightly coupled to the resolver internals, so keeping it separate didn't really make sense.

Additionally, substantial cross-crate changes have been made to improve our error handling:

hickory-dns (the server binary)

hickory-server (the library API)

hickory-resolver

We made many improvements to improve correctness and efficiency of both the recursive resolver and the "stub" resolver. In addition, we want to highlight the following changes:

hickory-net

We made substantial improvements to DNSSEC validation and our handling of potentially spoofing messages.

hickory-proto

Details

For more details, review the detailed release notes for our pre-releases:

and these final PRs merged after beta 4:

Thanks

Finally, we want to thank everyone who contributed to this release: @​bryanlarsen, @​billf, @​hargut, @​ibigbug, @​xi0, @​steffengy, @​james7132, @​Thomasdezeeuw, @​Kriskras99, @​mispp, @​conradludgate, @​nabijaczleweli, @​musicinmybrain, @​msrd0, @​jmwample, @​LAGonauta, @​tisonkun, @​provokateurin, @​lemon-sh, @​thomas-zahner, @​jpds, @​lpraneis, @​zachsmith1, @​jackboykin, @​ZnqbuZ, @​Jeidnx, @​kn0sys, @​matheus23, @​benesch, @​roblabla and of course our maintainers @​cpu, @​divergentdave, @​marcus0x62 and @​djc.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@ecv

ecv commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Superseded by #187. Bumping hickory-proto on its own leaves hickory-server on the old hickory-proto, and the build fails on all three platforms. #187 moves every hickory crate to 0.26.3 together, so the workspace builds against a single hickory-proto version.

@ecv ecv closed this Sep 11, 2026
@renovate

renovate Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor Author

Renovate Ignore Notification

Because you closed this PR without merging, Renovate will ignore this update (0.26.0). You will get a PR once a newer version is released. To ignore this dependency forever, add it to the ignoreDeps array of your Renovate config.

If you accidentally closed this PR, or if you changed your mind: rename this PR to get a fresh replacement PR.

@renovate
renovate Bot deleted the renovate/crate-hickory-proto-vulnerability branch September 11, 2026 16:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant