Skip to content

Gate hickory-dns reqwest feature behind an opt-in feature flag #802

Description

@liuchengxu

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:

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions