Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain author-level account (e.g. wholesale registration)
-
DeliveryAuthor a wwp_requests post
-
ExploitRead request_user_role_nonce on edit screen
-
ExecutionSubmit crafted request with user_role_set=administrator
-
ImpactGain administrator privileges / full site takeover
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated account at author level or above on a site running Wholesale for WooCommerce ≤2.0.5, and that account must have authored a wwp_requests post so it can access the request_user_role_nonce rendered in the meta box on the wwp_requests edit screen (obtainable through the plugin's wholesale registration workflow). Because the wwp_requests post type is registered with capability_type => 'post', ordinary author-level capabilities suffice. Limiting factors: the plugin must be installed and active, the attacker needs a foothold account (PR:L, not fully anonymous), and must possess/create a wwp_requests post to obtain the nonce. There is no capability check (no promote_users/manage_options) and no allowlist against permitted wholesale roles, so supplying 'administrator' as user_role_set succeeds; no victim user interaction is required (UI:N). |
| Impact | This is a genuine high-priority privilege escalation, well-calibrated at CVSS 8.8 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H). The signals are internally consistent: the vector correctly reflects a network-reachable, low-complexity flaw requiring some authentication (PR:L, author-level), and the C:H/I:H/A:H impact is justified because the outcome is full administrator control of the WordPress site - total takeover, not a partial compromise. SSVC agrees on Technical Impact: total. However, the secondary signals temper urgency: EPSS is only 0.37% (29th percentile), SSVC Exploitation is 'none', Automatable is 'no', there is no CISA KEV listing, and no public exploit code was identified. The 'not automatable' rating is accurate because exploitation requires an attacker to first obtain an author-level account AND to have authored a wwp_requests post - a per-target, human-driven precondition rather than a mass-scannable one. Net: a serious, fully-impactful vulnerability that warrants prompt patching wherever the plugin is installed, but current real-world exploitation pressure is low and any attack would be targeted rather than widespread. No conflicting data was found between the CVSS vector and the description. |
| Exploit ScenarioDerived | An attacker who holds (or registers for) an author-level account on a WordPress site running Wholesale for WooCommerce ≤2.0.5 - for example via the plugin's own wholesale registration form - authors a wwp_requests post and opens its edit screen to harvest the request_user_role_nonce. They then submit a crafted POST setting user_role_set to 'administrator', which save_requests_meta() passes unvalidated to WP_User::add_role(), granting them the administrator role and full site control. No public proof-of-concept was identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
Privilege escalation in the Wholesale for WooCommerce WordPress plugin (all versions up to and including 2.0.5) lets any authenticated author-level user promote their own account to administrator, giving full control of the WordPress site. The save_requests_meta() handler runs the user_role_set POST parameter through only sanitize_text_field() and hands it straight to WP_User::add_role() with no allowlist of permitted wholesale roles and no current_user_can('promote_users') or manage_options check, while the request_user_role_nonce that gates the call is reachable by any author who has authored a wwp_requests post (obtainable through the plugin's own wholesale registration form). No public exploit identified at time of analysis - EPSS is 0.37% (29th percentile) and CISA SSVC records exploitation as 'none' - but the assessed technical impact is total once the low-privilege foothold requirement is satisfied, and the CVSS 3.1 vector AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H is faithfully reflected here.
RemediationAI
An upstream fix is available in the plugin's Trac changeset 3621257 (https://plugins.trac.wordpress.org/changeset?reponame=&old=3621257%40woo-wholesale-pricing&new=3621257%40woo-wholesale-pricing), which adds the missing validation and capability gate to save_requests_meta(); a released patched version number is not independently confirmed from the supplied data, so administrators should check the plugin's WordPress.org page and the Wordfence advisory (https://www.wordfence.com/threat-intel/vulnerabilities/id/327a155c-7a7d-494d-94d1-f7e7ee8927f0?source=cve) and update to the first release that contains that changeset rather than assuming 2.0.5 is the last affected build. If an update cannot be applied immediately, the highest-value compensating control is to deactivate the Wholesale for WooCommerce plugin - the site loses wholesale pricing and the wholesale registration workflow but the vulnerable code path disappears entirely. Where the plugin must stay live, remove the ability of untrusted roles to create or edit wwp_requests posts (for example via a roles/capabilities editor, granting that post type only to trusted shop-manager accounts) and audit which accounts currently hold author or higher with post-creation rights, since that trade-off breaks self-service wholesale registration for customers. Auditing and preventing non-admin role changes is also advisable: enable WordPress audit logging for the wp_capabilities usermeta key, and deploy a WAF rule that rejects requests containing user_role_set=administrator (or any role token outside the expected wholesale set) to the wwp_requests edit endpoint - accepting that string-matching rules are evadable via encoding and only buy time. Finally, review existing administrators for unexpected promotion, because the vulnerable operation leaves no trace beyond the role change itself.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is an instance of CWE-269 (Improper Privilege Management) in the WooCommerce wholesale-pricing plugin (slug woo-wholesale-pricing, main class file inc/class-wwp-wholesale-requests.php). WordPress roles are stored per user in the wp_capabilities usermeta key, and WP_User::add_role() appends a role without removing existing ones, so an attacker does not need to break anything - they simply add 'administrator' alongside their existing author role and the elevated capabilities are live immediately. The vulnerable code path (save_requests_meta(), around lines 274/369/397) is reached from the meta box rendered on the wwp_requests custom-post edit screen. Its only guard is the request_user_role_nonce, and because the wwp_requests post type is registered with capability_type => 'post', WordPress maps its edit capability onto the primitive 'post' capabilities (edit_posts, edit_published_posts), which every author-level user already holds. The nonce is therefore not a security boundary: an attacker with an author account can create or claim a wwp_requests post via the plugin's wholesale registration workflow, load the edit screen, harvest the nonce, and then POST user_role_set=administrator. sanitize_text_field() only strips tags, whitespace and invalid UTF-8 - it performs no semantic validation, so arbitrary role strings pass through unchecked. The missing controls are a hard allowlist of assignable wholesale roles plus a capability gate such as current_user_can('promote_users'), the standard WordPress check for changing another user's role.
Know when Woocommerce gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Remote, low-complexity; PR:L because an author-level account plus an authored wwp_requests post is required; escalation to administrator yields full C/I/A impact, scope unchanged within WordPress.
Primary rating from Vendor (wordfence).
CVSS VectorVendor: wordfence
DescriptionCVE.org
The Wholesale for WooCommerce plugin for WordPress is vulnerable to Privilege Escalation in all versions up to, and including, 2.0.5. This is due to the save_requests_meta() function applying only sanitize_text_field() to the user_role_set POST parameter before passing it directly to WP_User::add_role(), with no allowlist validation against permitted wholesale roles and no capability check such as current_user_can('promote_users') or current_user_can('manage_options'). This makes it possible for authenticated attackers with author-level access and above to escalate their privileges to administrator by supplying administrator as the user_role_set value in a crafted request. The function is gated only by a nonce (request_user_role_nonce) that is rendered in the meta box on the wwp_requests post edit screen; because the post type is registered with capability_type => 'post', any author-level user who has authored a wwp_requests post - such as one created via the wholesale registration form - can access this nonce and submit the role-assignment request.
Articles & Coverage 1
Executive ViewAI
A privilege escalation flaw in the Wholesale for WooCommerce WordPress plugin (all versions through 2.0.5) allows any authenticated author-level user to promote their own account to administrator, handing them full control of the WordPress site, its storefront, customer records, and any connected payment or fulfillment integrations. The attacker entry point is undemanding: an author-level account, which many organizations hand to content contributors, agencies, or vendors - or which can be self-served through the plugin's own wholesale registration form. Until the vendor releases a fix, leadership should treat every site running this plugin as a potential full-compromise scenario rather than a routine plugin update.
No vendor-released patch identified at time of analysis. Interim mitigations: deactivate the Wholesale for WooCommerce plugin where feasible; otherwise suspend the wholesale registration/approval workflow, restrict and audit author-level accounts, add an allowlist of permitted wholesale roles plus a current_user_can('promote_users') or manage_options capability check in the save_requests_meta() handler, block POST requests carrying user_role_set or request_user_role_nonce from non-administrator sessions at the WAF or reverse proxy, and monitor for unauthorized administrator account creation and role changes.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
More in Woocommerce
View allThe WooCommerce plugin through 3.x for WordPress has a Directory Traversal Vulnerability via a /wp-content/plugins/wooco
Unauthenticated remote code execution in Print Invoice & Delivery Notes for WooCommerce through 5.8.0 lets remote attack
Unauthenticated arbitrary file upload in Addify's Request a Quote for WooCommerce plugin, affecting all versions up to a
The WooCommerce Help Scout WordPress plugin before 2.9.1 (https://woocommerce.com/products/woocommerce-help-scout/) allo
WooCommerce 7.1.0 contains a remote code execution vulnerability that allows attackers to execute arbitrary PHP code by
Unauthenticated path traversal in OrderConvo (the "Admin and Customer Messages After Order for WooCommerce" plugin), aff
Unauthenticated remote attackers can seize control of the payment configuration on WordPress stores running the Fundiin
Ultimate WooCommerce Gift Cards 3.0.2 is affected by a file upload vulnerability in the Custom GiftCard Template that ca
Unauthenticated attackers can exploit the Walletdoc Payment Gateway for WooCommerce plugin before version 1.8.5 to execu
Unauthenticated SQL injection in the ELEX WooCommerce Request a Quote WordPress plugin (all versions before 2.4.1) allow
Unauthenticated, network-reachable attackers can read the WooCommerce API consumer key and secret stored by the MgoSync
Stored cross-site scripting in the PDF Invoices & Packing Slips for WooCommerce plugin (5.16.2 up to, but not including,
EUVD-2026-50097
GHSA-fgx3-jj2q-3c9j
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB