AdForest WordPress Theme OTP Login Authentication Bypass — CVE-2026-1729
by ninjazan420 (f3ds cr3w est) · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-1729
- Category
- web
- Affected product
- AdForest theme for WordPress
- Affected versions
- All versions including 6.0.12
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Tags
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-02 |
| Author / Researcher | ninjazan420 (f3ds cr3w est) |
| CVE / Advisory | CVE-2026-1729 |
| Category | web |
| Severity | Critical |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | wordpress, adforest-theme, authentication-bypass, otp-login, ajax, admin-takeover, unauthenticated |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | AdForest theme for WordPress |
| Versions Affected | All versions including 6.0.12 |
| Language / Platform | Python 3.6+ exploit client against PHP/WordPress |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
The AdForest WordPress theme implements a one-time-password (OTP) login flow via the sb_login_user_with_otp_fun AJAX handler, but the handler does not actually verify the submitted OTP code against a server-issued value before authenticating the requested user. As a result, an unauthenticated attacker can submit any arbitrary OTP value together with a target user_id (defaulting to 1, typically the site administrator) and have the server log them in as that user. The included Python PoC sends this forged OTP login request to a target’s admin-ajax.php, captures the resulting authenticated session cookies, and verifies success by confirming access to /wp-admin/.
Vulnerability Details
Root Cause
The sb_login_user_with_otp_fun function does not verify the correctness of the supplied OTP code before establishing an authenticated WordPress session for the specified user, effectively skipping the credential/verification step entirely.
Attack Vector
- Attacker sends an unauthenticated POST to
/wp-admin/admin-ajax.phpwithaction=sb_login_user_with_otp, an arbitraryotp_code, and a targetuser_id(default1). - The handler accepts the request without validating the OTP and issues valid WordPress authentication cookies for that user.
- Attacker’s session now carries the target user’s
wordpress_logged_in_*cookie. - Attacker requests
/wp-admin/with the session cookies and receives full administrative access ifuser_idcorresponds to an admin account.
Impact
Complete unauthenticated account takeover of any WordPress user (including administrators) on sites running a vulnerable AdForest theme version, leading to full site compromise.
Environment / Lab Setup
Target: WordPress site with AdForest theme installed (all versions including 6.0.12)
Attacker: Python 3.6+, pip package requests
Proof of Concept
PoC Script
See
exploit.pyin this folder.
| |
The script posts a forged OTP login request to the target’s admin-ajax.php endpoint for the given user_id, then verifies the bypass by requesting /wp-admin/ with the returned session cookies and reporting success along with the captured session cookies.
Detection & Indicators of Compromise
Signs of compromise:
- Successful admin logins with no preceding password entry or OTP delivery event
wordpress_logged_in_*cookies issued immediately after ansb_login_user_with_otpAJAX call- Administrative actions performed from IPs with no prior legitimate login history
Remediation
| Action | Detail |
|---|---|
| Primary fix | No vendor patch confirmed as of 2026-07-05 — monitor for an AdForest theme update beyond 6.0.12 |
| Interim mitigation | Disable the OTP login AJAX action until patched, or enforce real server-side OTP verification and rate limiting before issuing authentication cookies |
References
Notes
Mirrored from https://github.com/ninjazan420/CVE-2026-1729-PoC-AdForest-WordPress-Authentication-Bypass on 2026-07-05.
| |