Summary
helios-core, helios-ethereum, and helios-verifiable-api-client consume reqwest from the workspace with the hickory-dns feature hardcoded:
https://github.com/a16z/helios/blob/v0.11.1/Cargo.toml#L71
reqwest = { version = "0.12.4", features = [..., "hickory-dns", ...] }
Crates inherit this with reqwest.workspace = true and no per-crate feature override:
helios-core/Cargo.toml:22
helios-ethereum/Cargo.toml:24
helios-verifiable-api/client/Cargo.toml:11
This forces every Helios consumer to pull hickory-resolver / hickory-proto transitively, with no way to opt out from the consumer's manifest.
Why this matters
The currently resolved Hickory stack is affected by RUSTSEC-2026-0119 — a medium-severity O(n²) CPU-exhaustion issue in hickory-proto 0.25.x. An attacker with DNS-position influence over a Helios-configured RPC domain (BGP hijack, DNS-zone takeover, on-path) can trigger CPU exhaustion in the resolver, stalling Helios-driven request paths.
The recommended fix per the advisory is to bump hickory-proto to >=0.26.1. Consumers can't currently do that downstream:
[patch.crates-io] to hickory-proto 0.26.x is not semver-compatible because hickory-resolver 0.25.2 requires hickory-proto = "0.25" (hickory-resolver-0.25.2/Cargo.toml:191).
- Helios's workspace-level feature set can't be overridden from the consumer's
Cargo.toml.
The realistic path forward is to either:
- Move
hickory-dns behind an opt-in feature flag exposed by Helios crates (e.g. helios-core/hickory-dns), so consumers can opt out and fall back to reqwest's default system resolver, or
- Bump Helios's workspace
reqwest to a version whose hickory-resolver / hickory-proto are at the fixed 0.26.x line.
(1) is the cleaner change because it gives downstream control without committing Helios to a specific Hickory release cadence.
Context
This was surfaced during a third-party security audit of a Helios-based prover service. Downstream impact: even with the service bound to localhost, an attacker controlling DNS for the configured execution / consensus RPC domains can cause prover CPU exhaustion via Helios's resolver path.
We're not blocked on a fix — we can wait for upstream — but a feature flag would let any operator opt out today and pick up RUSTSEC-2026-0119 mitigations at their own pace.
Suggested change
Workspace Cargo.toml:
-reqwest = { version = "0.12.4", features = [..., "hickory-dns", ...] }
+reqwest = { version = "0.12.4", features = [..., ...] } # hickory-dns removed
Per-crate (example for helios-core/Cargo.toml):
[features]
default = []
hickory-dns = ["reqwest/hickory-dns"]
Happy to send a PR if this direction looks right.
References
Summary
helios-core,helios-ethereum, andhelios-verifiable-api-clientconsumereqwestfrom the workspace with thehickory-dnsfeature hardcoded:https://github.com/a16z/helios/blob/v0.11.1/Cargo.toml#L71
Crates inherit this with
reqwest.workspace = trueand no per-crate feature override:helios-core/Cargo.toml:22helios-ethereum/Cargo.toml:24helios-verifiable-api/client/Cargo.toml:11This forces every Helios consumer to pull
hickory-resolver/hickory-prototransitively, with no way to opt out from the consumer's manifest.Why this matters
The currently resolved Hickory stack is affected by RUSTSEC-2026-0119 — a medium-severity O(n²) CPU-exhaustion issue in
hickory-proto0.25.x. An attacker with DNS-position influence over a Helios-configured RPC domain (BGP hijack, DNS-zone takeover, on-path) can trigger CPU exhaustion in the resolver, stalling Helios-driven request paths.The recommended fix per the advisory is to bump
hickory-prototo >=0.26.1. Consumers can't currently do that downstream:[patch.crates-io]tohickory-proto 0.26.xis not semver-compatible becausehickory-resolver 0.25.2requireshickory-proto = "0.25"(hickory-resolver-0.25.2/Cargo.toml:191).Cargo.toml.The realistic path forward is to either:
hickory-dnsbehind an opt-in feature flag exposed by Helios crates (e.g.helios-core/hickory-dns), so consumers can opt out and fall back to reqwest's default system resolver, orreqwestto a version whosehickory-resolver/hickory-protoare at the fixed 0.26.x line.(1) is the cleaner change because it gives downstream control without committing Helios to a specific Hickory release cadence.
Context
This was surfaced during a third-party security audit of a Helios-based prover service. Downstream impact: even with the service bound to localhost, an attacker controlling DNS for the configured execution / consensus RPC domains can cause prover CPU exhaustion via Helios's resolver path.
We're not blocked on a fix — we can wait for upstream — but a feature flag would let any operator opt out today and pick up RUSTSEC-2026-0119 mitigations at their own pace.
Suggested change
Workspace
Cargo.toml:Per-crate (example for
helios-core/Cargo.toml):Happy to send a PR if this direction looks right.
References