Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:H/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Unauthenticated network (PR:N/AV:N) but requires racing an active OTL window (AC:H); scope changes to the VPN network (S:C), high confidentiality from key recovery (C:H), low integrity from peer impersonation (I:L).
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
3DescriptionCVE.org
WireGuard Easy through 15.3.0, fixed in commit 66b292b, contains a cryptographically weak one-time link token generation vulnerability that allows unauthenticated network attackers to recover WireGuard peer credentials by brute-forcing a keyspace of at most 1000 candidate tokens per client ID, as the token is computed using CRC32 over a random value constrained to 0-999. Attackers can enumerate candidate tokens against the unauthenticated /cnf/:oneTimeLink route, which lacks rate limiting and does not validate token expiration, to obtain a peer's PrivateKey and PresharedKey and impersonate that peer on the VPN network.
AnalysisAI
Peer credential disclosure in WireGuard Easy (wg-easy) through 15.3.0 lets unauthenticated network attackers recover a client's WireGuard PrivateKey and PresharedKey by brute-forcing the one-time configuration link. Because the OTL token is derived from CRC32 over a random value bounded to 0-999, an attacker faces at most 1000 candidate tokens per client ID against the unauthenticated /cnf/:oneTimeLink route, which had no rate limiting and did not enforce token expiration. There is no public exploit identified at time of analysis, but the small keyspace makes exploitation trivial once a valid link is active; the flaw was reported by VulnCheck and is fixed upstream.
Technical ContextAI
wg-easy is a self-hosted web UI and management layer for WireGuard VPN that generates per-peer configuration files and exposes them via 'one-time link' (OTL) download URLs. The root cause is CWE-338 (use of a cryptographically weak PRNG): the OTL token is computed as CRC32 of a randomly chosen integer constrained to the range 0-999, so the effective token space collapses to at most 1000 values per client ID. CRC32 is a non-cryptographic checksum with no keyspace expansion, so the token entropy is bounded entirely by the 0-999 seed. The affected component is cpe:2.3:a:wg-easy:wg-easy (all versions through 15.3.0). The PR diff shows the OTL service itself carried developer comments acknowledging brute-force weakness ('This is known to be vulnerable to brute force attacks'), and that the download route (/cnf/[oneTimeLink].ts) did not check otl.expiresAt before serving the config, compounding the weak-token issue by leaving expired tokens redeemable.
RemediationAI
Upstream fix available (PR/commit); released patched version not independently confirmed - update wg-easy to a build that includes commit 66b292b (PR #2661) via https://github.com/wg-easy/wg-easy/commit/66b292b11bde3664f05ffb016c8082665d261ded, which adds server-side expiration enforcement on the /cnf/:oneTimeLink route (rejecting expired links with HTTP 410) and hardens session handling. Until you can upgrade, remove the wg-easy admin/download interface from untrusted networks by binding it to localhost or placing it behind a VPN or authenticated reverse proxy, and add rate limiting (for example via nginx limit_req) in front of the /cnf/ path to blunt the 1000-token brute force; the trade-off is that legitimate remote self-service config downloads become harder. Operationally, avoid generating one-time links unless immediately needed and treat any peer whose OTL was exposed as potentially compromised - rotate that peer's WireGuard PrivateKey and PresharedKey. Refer to the VulnCheck advisory (https://www.vulncheck.com/advisories/wireguard-easy-weak-token-generation-information-disclosure-via-otl-route) for details.
Same technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-45013
GHSA-m894-wgpg-hwpv