This project might be open to known security vulnerabilities, which can be prevented by tightening the version range of affected dependencies. Find detailed information at the bottom.

Crate hickory-resolver

Dependencies

(27 total, 1 outdated, 3 possibly insecure)

CrateRequiredLatestStatus
 async-recursion^1.0.01.1.1up to date
 cfg-if^11.0.4up to date
 futures-util^0.3.50.3.34up to date
 hickory-net ⚠️^0.26.00.26.2maybe insecure
 hickory-proto ⚠️^0.26.00.26.2maybe insecure
 ipconfig^0.3.00.3.4up to date
 ipnet^2.11.02.12.2up to date
 jni^0.22.10.22.4up to date
 lru-cache^0.1.20.1.2up to date
 metrics^0.24.10.24.6up to date
 moka^0.120.12.16up to date
 ndk-context^0.1.10.1.1up to date
 once_cell^1.20.01.21.4up to date
 parking_lot^0.120.12.5up to date
 quinn^0.11.20.11.11up to date
 rand^0.10.00.10.2up to date
 resolv-conf^0.7.00.7.6up to date
 rustls^0.23.230.23.44up to date
 serde^1.01.0.229up to date
 smallvec ⚠️^1.61.16.0maybe insecure
 system-configuration^0.70.8.0out of date
 thiserror^22.0.20up to date
 tokio^1.361.53.1up to date
 tokio-rustls^0.260.26.5up to date
 toml^1.0.11.1.5+spec-1.1.0up to date
 tracing^0.1.300.1.44up to date
 webpki-roots^11.0.9up to date

Dev dependencies

(9 total, 2 possibly insecure)

CrateRequiredLatestStatus
 async-trait^0.1.430.1.92up to date
 criterion^0.8.20.8.2up to date
 futures-executor^0.3.50.3.34up to date
 hickory-proto ⚠️^0.26.00.26.2maybe insecure
 metrics-util^0.20.00.20.4up to date
 serde_json^11.0.151up to date
 tokio^1.361.53.1up to date
 toml^1.0.11.1.5+spec-1.1.0up to date
 tracing-subscriber ⚠️^0.3.100.3.23maybe insecure

Security Vulnerabilities

smallvec: Buffer overflow in SmallVec::insert_many

RUSTSEC-2021-0003

A bug in the SmallVec::insert_many method caused it to allocate a buffer that was smaller than needed. It then wrote past the end of the buffer, causing a buffer overflow and memory corruption on the heap.

This bug was only triggered if the iterator passed to insert_many yielded more items than the lower bound returned from its size_hint method.

The flaw was corrected in smallvec 0.6.14 and 1.6.1, by ensuring that additional space is always reserved for each item inserted. The fix also simplified the implementation of insert_many to use less unsafe code, so it is easier to verify its correctness.

Thank you to Yechan Bae (@Qwaz) and the Rust group at Georgia Tech’s SSLab for finding and reporting this bug.

tracing-subscriber: Logging user input may result in poisoning logs with ANSI escape sequences

RUSTSEC-2025-0055

Previous versions of tracing-subscriber were vulnerable to ANSI escape sequence injection attacks. Untrusted user input containing ANSI escape sequences could be injected into terminal output when logged, potentially allowing attackers to:

  • Manipulate terminal title bars
  • Clear screens or modify terminal display
  • Potentially mislead users through terminal manipulation

In isolation, impact is minimal, however security issues have been found in terminal emulators that enabled an attacker to use ANSI escape sequences via logs to exploit vulnerabilities in the terminal emulator.

This was patched in PR #3368 to escape ANSI control characters from user input.

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

RUSTSEC-2026-0119

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.

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

RUSTSEC-2026-0120

The NSEC3 closest-encloser proof validation in hickory-net'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.

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