Skip to main content

Wholesale for WooCommerce CVE-2026-12144

| EUVDEUVD-2026-50097 HIGH
Improper Privilege Management (CWE-269)
2026-07-29 security@wordfence.com GHSA-fgx3-jj2q-3c9j
8.8
CVSS 3.1 · Vendor: wordfence
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain author-level account (e.g. wholesale registration)
  2. Delivery
    Author a wwp_requests post
  3. Exploit
    Read request_user_role_nonce on edit screen
  4. Execution
    Submit crafted request with user_role_set=administrator
  5. Impact
    Gain 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Wholesale For WooCommerce 0 ≤2.0.5

Affected Packages

euvd wholesale_for_woocommerce no fix

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

Vendor (wordfence) PRIMARY 8.8 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 8.8 HIGH

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (wordfence).

CVSS VectorVendor: wordfence

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

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.

Executive ViewAI

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Medium
commercial WooCommerce wholesale plugin, common but not on every store
Social Media
2
Sightings
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

CVE-2017-17058 HIGH POC
7.5 Nov 29

The WooCommerce plugin through 3.x for WordPress has a Directory Traversal Vulnerability via a /wp-content/plugins/wooco

CVE-2025-13773 CRITICAL POC
9.8 Dec 24

Unauthenticated remote code execution in Print Invoice & Delivery Notes for WooCommerce through 5.8.0 lets remote attack

CVE-2026-18143 CRITICAL POC
9.8 Sep 26

Unauthenticated arbitrary file upload in Addify's Request a Quote for WooCommerce plugin, affecting all versions up to a

CVE-2021-24212 CRITICAL POC
9.8 Apr 05

The WooCommerce Help Scout WordPress plugin before 2.9.1 (https://woocommerce.com/products/woocommerce-help-scout/) allo

CVE-2022-50972 CRITICAL POC
9.3 Jun 20

WooCommerce 7.1.0 contains a remote code execution vulnerability that allows attackers to execute arbitrary PHP code by

CVE-2025-10162 HIGH POC
8.6 Oct 07

Unauthenticated path traversal in OrderConvo (the "Admin and Customer Messages After Order for WooCommerce" plugin), aff

CVE-2026-81649 CRITICAL POC
9.1 Oct 11

Unauthenticated remote attackers can seize control of the payment configuration on WordPress stores running the Fundiin

CVE-2020-35627 HIGH POC
8.8 Dec 28

Ultimate WooCommerce Gift Cards 3.0.2 is affected by a file upload vulnerability in the Custom GiftCard Template that ca

CVE-2026-103307 HIGH POC
8.6 Oct 14

Unauthenticated attackers can exploit the Walletdoc Payment Gateway for WooCommerce plugin before version 1.8.5 to execu

CVE-2026-14962 HIGH POC
8.6 Sep 09

Unauthenticated SQL injection in the ELEX WooCommerce Request a Quote WordPress plugin (all versions before 2.4.1) allow

CVE-2026-92404 HIGH POC
7.5 Sep 19

Unauthenticated, network-reachable attackers can read the WooCommerce API consumer key and secret stored by the MgoSync

CVE-2026-111578 HIGH POC
7.5 Oct 30

Stored cross-site scripting in the PDF Invoices & Packing Slips for WooCommerce plugin (5.16.2 up to, but not including,

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy