JAY Login & Register "Switch Back" Cookie Authentication Bypass (CVE-2025-14440)
by Nxploited (Khaled Alenazi) · 2026-07-06
- Severity
- Critical
- CVE
- CVE-2025-14440
- Category
- web
- Affected product
- JAY Login & Register (WordPress plugin)
- Affected versions
- <= 2.4.01
- Disclosed
- 2026-07-06
- Patch status
- unpatched
Tags
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-06 |
| Last Updated | 2026-07-06 |
| Author / Researcher | Nxploited (Khaled Alenazi) |
| CVE / Advisory | CVE-2025-14440 |
| Category | web |
| Severity | Critical |
| CVSS Score | 9.8 (per NVD) |
| Status | Weaponized |
| Tags | wordpress, jay-login-register, authentication-bypass, cookie-manipulation, unauthenticated, python, cwe-287, cwe-290 |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | JAY Login & Register (WordPress plugin) |
| Versions Affected | <= 2.4.01 |
| Language / Platform | Python 3 exploit targeting a PHP/WordPress plugin |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
The JAY Login & Register plugin implements a “switch back” feature — presumably intended for admins who impersonate another user to later switch back to their own account — via the jay_login_register_process_switch_back handler. This handler trusts the client-supplied jay_login_register_switched_from_user cookie to determine which user session to restore, without adequately validating that the requester was actually the legitimate original session holder. By setting this cookie to an arbitrary value and calling the jay_login_register_switch_back action with a target id parameter (plus a nonce scraped from the page), an unauthenticated attacker can cause the plugin to authenticate them as any existing user, including administrators, so long as the user ID is known or guessable.
Vulnerability Details
Root Cause
The exploit sets a static, attacker-chosen value for the trust-anchor cookie and never needs a genuine prior session:
| |
The nonce for the switch_back action is scraped directly from the public page (no authentication needed to view it):
| |
The exploit then requests the switch-back action with the target’s id, and the plugin — trusting the forged cookie instead of verifying an actual prior authenticated session — authenticates the requester as that user:
| |
Attack Vector
- Attacker requests the target site’s homepage (unauthenticated) with a forged
jay_login_register_switched_from_usercookie, and extracts theswitch_backnonce embedded in the page’s markup. - Attacker sends
GET /?action=jay_login_register_switch_back&_wpnonce=<nonce>&id=<target_user_id>with the same forged cookie. jay_login_register_process_switch_backvalidates only the cookie’s presence/format (not its legitimacy against a real prior session) and authenticates the request as the specifiedid, returning valid session cookies.- Attacker repeats with
id=1(typically the administrator) to obtain full admin access.
Impact
Unauthenticated authentication bypass allowing impersonation of any existing WordPress user, including administrators — leading to full site compromise.
Environment / Lab Setup
Target: WordPress install with JAY Login & Register plugin <= 2.4.01 active
Attacker: Python 3, `pip install requests`
Proof of Concept
PoC Script
See
CVE-2025-14440.pyin this folder.
| |
Detection & Indicators of Compromise
GET / HTTP/1.1
Cookie: jay_login_register_switched_from_user=1
GET /?action=jay_login_register_switch_back&_wpnonce=<nonce>&id=<n> HTTP/1.1
Cookie: jay_login_register_switched_from_user=1
Signs of compromise:
- Requests carrying a
jay_login_register_switched_from_usercookie without a corresponding legitimate prior admin-impersonation session - Successful authentication via the
jay_login_register_switch_backaction from IPs/User-Agents with no prior login history - Sudden admin-level session cookies issued to requests that never passed through
/wp-login.php
Remediation
| Action | Detail |
|---|---|
| Primary fix | Update JAY Login & Register beyond 2.4.01 to a version that validates the jay_login_register_switched_from_user cookie against a server-side session record (not merely its presence/format) before restoring a switched-from user |
| Interim mitigation | Disable the “switch back” / user-switching feature until patched; strip/reject client-supplied jay_login_register_switched_from_user cookies at the reverse proxy/WAF; monitor for the jay_login_register_switch_back action in access logs |
References
Notes
Mirrored from https://github.com/Nxploited/CVE-2025-14440 on 2026-07-06. Templated Nxploited branding/disclaimer, but the cookie-forgery and nonce-extraction logic is functional and matches the stated auth-bypass CVE.
| |