Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
PR:L confirmed by Contributor-level requirement; AC:L reflects straightforward POST bypass once authenticated, despite Pro plugin dependency.
Primary rating from Vendor (Wordfence).
CVSS VectorNVD
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Lifecycle Timeline
2DescriptionNVD
The Subscriptions for WooCommerce plugin for WordPress is vulnerable to Privilege Escalation in versions up to, and including, 2.0.0. This is due to the save_meta_boxes() function persisting the _wps_plan_user_role membership plan meta from $_POST without an allowlist that excludes privileged roles - the only validations applied, sanitize_key() and wp_roles()->is_role(), both accept 'administrator' as a valid value, and the UI's disabled attribute on the role dropdown is a client-side-only control trivially bypassed via DevTools or a direct POST request; additionally, because the wps_membership_plan custom post type is registered with capability_type => 'post', any user who can edit posts satisfies the current_user_can('edit_post', $post_id) guard in save_meta_boxes(). This makes it possible for authenticated attackers, with Contributor-level access and above, to escalate their privileges to Administrator by storing 'administrator' as the role granted on membership acquisition, which the Pro companion plugin then applies via add_role() during membership lifecycle events. Successful exploitation requires the Subscriptions for WooCommerce Pro companion plugin to be active, as it is the component that reads the stored _wps_plan_user_role meta via get_post_meta() and calls add_role() to apply the role during membership lifecycle events.
Articles & Coverage 1
AnalysisAI
Privilege escalation in the Subscriptions for WooCommerce WordPress plugin (versions up to and including 2.0.0) allows authenticated Contributors to elevate their accounts to Administrator by poisoning a membership plan's stored role meta. The save_meta_boxes() function accepts the _wps_plan_user_role POST parameter with no server-side allowlist blocking privileged roles; the only guards applied - sanitize_key() and wp_roles()->is_role() - both pass 'administrator' as valid. …
Unlock full vulnerability intelligence
- Risk assessment & exploitation conditions
- Attack chain visualization
- Remediation with exact patch versions
- Threat intelligence from 22 sources
- Personal watchlist & email alerts
Free forever · No credit card required
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata
Vulnerability AssessmentAI
| Exploitation | Exploitation requires: (1) an attacker-controlled account with at minimum Contributor-level WordPress access - this is the capability needed to satisfy the `current_user_can('edit_post', $post_id)` check in `save_meta_boxes()`; (2) the Subscriptions for WooCommerce Pro companion plugin must be installed and active, as it is the exclusive component that reads `_wps_plan_user_role` via `get_post_meta()` and calls `add_role()` during membership lifecycle events - the free plugin alone stores the poisoned value but never applies it; (3) the attacker must be able to acquire a membership tied to the modified plan (purchase it, or if self-service registration is enabled, enroll). … Additional conditions and limiting factors are described in the full assessment. |
| Risk Assessment | The CVSS 8.8 score (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) accurately reflects the network-accessible, low-complexity nature of the attack once a Contributor account exists. … Full risk analysis with EPSS, KEV, and SSVC signal comparison available after sign-in. |
| Exploit Scenario | An attacker registers a Contributor-level account on a WordPress site running both the free and Pro Subscriptions for WooCommerce plugins. They navigate to edit or create a membership plan, then use browser DevTools (or a tool like Burp Suite) to remove the `disabled` attribute from the role dropdown and set its value to 'administrator' before submitting the form. … |
| Remediation | A fix has been committed to the plugin repository (WordPress.org SVN changeset 3624543, referenced at https://plugins.trac.wordpress.org/changeset?reponame=&old=3624543%40subscriptions-for-woocommerce&new=3624543%40subscriptions-for-woocommerce); however, the exact released version number of the patched build is not confirmed in the available input data - administrators should update to the latest available version beyond 2.0.0 via the WordPress plugin dashboard and verify the installed version exceeds 2.0.0. … Detailed patch versions, workarounds, and compensating controls in full report. |
Recommended ActionAI
Within 24 hours: Inventory all WooCommerce installations to identify systems running Subscriptions for WooCommerce versions up to 2.0.0; immediately restrict Contributor-level access to membership plan configuration interfaces, or disable both the base plugin and the Subscriptions for WooCommerce Pro plugin if not business-critical. …
Sign in for detailed remediation steps and compensating controls.
Threat intelligence, references, and detailed analysis are available after sign-in.
Same weakness CWE-269 – Improper Privilege Management
View allSame technique Privilege Escalation
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-51687
GHSA-x6w6-m8vc-m6cp