Mullvad exit IPs are surprisingly identifying

· privacy · Source ↗

TLDR

  • Mullvad assigns exit IPs deterministically from a seeded RNG per WireGuard key, letting observers correlate a user across servers with >99% confidence.

Key Takeaways

  • Mullvad uses only 578 servers but assigns multiple exit IPs per server; your exit IP is static per WireGuard key, not re-randomized on reconnect.
  • The exit IP index is proportional across all servers because Rust’s random_range generates the same underlying float regardless of pool size bounds.
  • This means exit IPs across different servers fall in the same percentile, collapsing 8.2 trillion theoretical combinations down to just 284 observed ones.
  • An attacker with IP logs from two sites can narrow a user to roughly 0.34% of Mullvad’s user base, roughly 340 people at 100k active users.
  • Mitigation: avoid switching servers more than once per key, and force-rotate your WireGuard pubkey by logging out of the Mullvad app.

Hacker News Comment Review

  • Mullvad co-CEO confirmed the behavior is partly unintended, said a patch was already being tested on a subset of infrastructure, and noted key rotation is the preferred client-side fix.
  • Commenters split on threat model: several argued VPNs were never designed for anonymity against sites visited, and Tor remains the correct tool for that; others pushed back that Mullvad’s marketing implies stronger privacy.
  • The ‘>99% confidence’ framing drew skepticism as overconfident, but defenders noted that on small forums with few daily signups, overlapping float ranges are still strong circumstantial evidence.

Notable Comments

  • @kfreds: Mullvad co-CEO confirmed partial intent, active patch rollout, and promised a re-evaluation of the feature design.

Original | Discuss on HN