Xboard / V2Board — Magic Link Token Leak Unauth Account Takeover (CVE-2026-39912)
by Valentin Lobstein (Chocapikk) · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-39912
- Category
- web
- Affected product
- V2Board / Xboard (VPN/proxy subscription management panels)
- Affected versions
- V2Board >= 1.6.1 through 1.7.4; Xboard all versions through 0.1.9+
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Tags
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-04 |
| Author / Researcher | Valentin Lobstein (Chocapikk) |
| CVE / Advisory | CVE-2026-39912 |
| Category | web |
| Severity | Critical |
| CVSS Score | 9.1 (CWE-201) |
| Status | Weaponized |
| Tags | xboard, v2board, php, laravel, account-takeover, magic-link, unauthenticated, information-disclosure, proxy-panel |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | V2Board / Xboard (VPN/proxy subscription management panels) |
| Versions Affected | V2Board >= 1.6.1 through 1.7.4; Xboard all versions through 0.1.9+ |
| Language / Platform | Python (exploit) targeting PHP/Laravel web application |
| Authentication Required | No (requires only a known registered email address) |
| Network Access Required | Yes |
Summary
Both V2Board and its fork Xboard implement a “login with mail link” (magic link) feature. Their loginWithMailLink endpoint (AuthController.php in V2Board, MailLinkService.php in Xboard) generates the one-time login link and is supposed to only deliver it via email — but both implementations also return the link directly in the HTTP response body. An unauthenticated attacker who knows any registered email address (including an admin’s) can request a magic link for that account and read the token straight out of the API response, then use it to log in as that user, achieving full account takeover — including admin takeover — in just two HTTP requests.
Vulnerability Details
Root Cause
loginWithMailLink dispatches the email containing the magic link but also returns the same link/token in the JSON response body (return response(['data' => $link]) in V2Board; return [true, $link] in Xboard), leaking a sensitive authentication token to the requester instead of only the intended email recipient (CWE-201).
Attack Vector
- Confirm
login_with_mail_link_enableis turned on for the target panel (not default, but commonly enabled). - Send an unauthenticated request to the magic-link login endpoint with a known/guessed registered email address (e.g. an admin’s).
- Read the leaked magic-link token/URL directly from the HTTP response.
- Follow the leaked link to authenticate as that user, obtaining a valid session/bearer token — including
is_admin: trueif the targeted email belongs to an administrator.
Impact
Full unauthenticated account takeover of any user — including administrators — on any of the thousands of internet-exposed V2Board/Xboard instances (ZoomEye shows 7,000+ exposed instances), enabling access to subscription data, user PII, and administrative panel functions.
Environment / Lab Setup
Target: V2Board >= 1.6.1 (through 1.7.4) or Xboard (through 0.1.9+) with magic-link login enabled
Attacker: python3, requests
Proof of Concept
PoC Script
See
exploit.pyin this folder.
| |
The script requests a magic login link for the given email, extracts the leaked token from the API response, authenticates using it, and dumps user info, subscription details, and active sessions for the compromised account (optionally saving the dump to a file).
Detection & Indicators of Compromise
Signs of compromise:
- Repeated
loginWithMailLinkrequests for known/admin email addresses from unfamiliar IPs - Admin sessions established immediately after a magic-link request with no corresponding email click event
Remediation
| Action | Detail |
|---|---|
| Primary fix | Apply V2Board PR #981 or Xboard PR #873, which stop returning the link/token in the API response (return [true, true]) |
| Interim mitigation | Disable login_with_mail_link_enable until patched; monitor for anomalous magic-link request volume |
References
Notes
Mirrored from https://github.com/Chocapikk/CVE-2026-39912 on 2026-07-05.
| |