WordPress Mobile Builder Plugin JWT Authentication Bypass to Admin Account Creation (CVE-2025-68860)
by Nxploited (Khaled Alenazi) · 2026-07-06
- Severity
- Critical
- CVE
- CVE-2025-68860
- Category
- web
- Affected product
- WordPress "Mobile Builder" plugin
- Affected versions
- <= 1.4.2
- 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-68860 |
| Category | web |
| Severity | Critical |
| CVSS Score | 9.8 (per NVD, AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Status | Weaponized |
| Tags | wordpress, mobile-builder, jwt, authentication-bypass, hardcoded-secret, privilege-escalation, rest-api, python, cwe-288 |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | WordPress “Mobile Builder” plugin |
| Versions Affected | <= 1.4.2 |
| Language / Platform | Python 3.7+ (PoC client) targeting a PHP/WordPress REST API server |
| Authentication Required | No |
| Network Access Required | Yes (HTTP/HTTPS access to the target WordPress site’s REST API) |
Summary
The WordPress “Mobile Builder” plugin (<= 1.4.2) implements its own JWT-based authentication scheme for its REST API integration but signs/validates tokens using a static, publicly known secret (example_key) rather than a per-site secret. Because the signing key is a hardcoded default that was never required to be rotated or randomized, any remote, unauthenticated attacker can forge a valid JWT asserting user_id=1 (WordPress’s default administrator account ID) and present it to the standard /wp-json/wp/v2/ REST endpoints. The included PoC forges such a token, confirms admin-level access via /wp-json/wp/v2/users/me, and then uses the forged session to create a brand-new administrator account through /wp-json/wp/v2/users, resulting in full site takeover.
Vulnerability Details
Root Cause
The plugin’s JWT authentication middleware validates incoming bearer tokens against a hardcoded default secret string (example_key) instead of a unique, randomly generated per-installation secret. Since the secret is a known constant shared across all installations that haven’t manually reconfigured it, anyone can independently construct a token with the HS256 algorithm that the server will accept as legitimate:
| |
Because user_id is attacker-controlled in the payload and the plugin trusts it directly to resolve the acting WordPress user, setting user_id=1 impersonates the default admin account (WordPress’s first-created user, conventionally the site administrator) with no credentials whatsoever.
Attack Vector
- Attacker points the exploit at any target site running the vulnerable Mobile Builder plugin (no account or prior access needed).
- Script forges a JWT with
alg=HS256, signed using the hardcoded shared secretexample_key, claiminguser_id=1. - Script sends the forged token as a Bearer token to
GET /wp-json/wp/v2/users/meto confirm the server accepts it as an authenticated admin session. - Using the same forged token, the script issues
POST /wp-json/wp/v2/userswith a new user payload (username,email,password,roles: ["administrator"]), which the WordPress REST API accepts because the caller appears to have administrator privileges. - A brand-new, fully privileged administrator account now exists on the target, giving the attacker persistent, credentialed access to
/wp-admin.
Impact
Complete compromise of the WordPress installation: unauthenticated remote attackers can silently provision a new administrator account, enabling arbitrary plugin/theme installation (leading to PHP code execution), database access, content tampering, and full site takeover.
Environment / Lab Setup
Target: WordPress installation with the "Mobile Builder" plugin <= 1.4.2 active and REST API reachable
(wp-json enabled, default WordPress REST routes not firewalled)
Attacker: Python 3.7+
pip3 install pyjwt requests colorama
Proof of Concept
PoC Script
See
CVE-2025-68860.pyin this folder.
| |
The script forges the JWT, verifies it against /wp-json/wp/v2/users/me, then creates a new administrator account (username: Nxploited, password: admin, email: adminnx@admin.com) via /wp-json/wp/v2/users and prints the full REST API response.
Detection & Indicators of Compromise
POST /wp-json/wp/v2/users HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: application/json
{"username":"Nxploited","email":"adminnx@admin.com","roles":["administrator"], ...}
Signs of compromise:
- New, unrecognized administrator accounts (e.g.,
Nxploited) inwp_users/wp_usermeta - REST API access logs showing
Authorization: Bearerrequests to/wp-json/wp/v2/users*without corresponding login events - JWTs decodable with the well-known default secret
example_key
Remediation
| Action | Detail |
|---|---|
| Primary fix | Update Mobile Builder plugin to a patched version that generates and enforces a unique, random per-site JWT signing secret; no official patched version identified at time of mirroring — remove/disable the plugin if unpatched |
| Interim mitigation | Disable or firewall the Mobile Builder plugin’s JWT authentication endpoints; restrict /wp-json/wp/v2/users write access; rotate any secret to a cryptographically random value if configurable; monitor for unauthorized admin account creation |
References
Notes
Mirrored from https://github.com/Nxploited/CVE-2025-68860 on 2026-07-06. Repo carries Nxploited’s typical templated branding (banner, disclaimer, author credits) but the exploit logic — hardcoded JWT secret forgery against the Mobile Builder REST endpoints — is CVE-specific and functional.
| |