CVE-2025-58600
Executive Summary
CVE-2025-58600 is a Missing Authorization vulnerability in the Paid Member Subscriptions WordPress plugin by Cozmoslabs, affecting versions up to and including 2.15.9. This flaw allows unauthenticated attackers to exploit incorrectly configured access control security levels, potentially leading to unauthorized access to sensitive subscription data or functionality. The vulnerability has a CVSS score of 5.3 (Medium) and an EPSS score of 0.0%, indicating low exploitation likelihood at this time. However, due to the lack of a patch, it poses a persistent risk to WordPress sites using the plugin.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability resides in a WordPress plugin distributed via the official WordPress plugin repository. As a supply chain risk, any site using the plugin version <= 2.15.9 is affected. No official patch or advisory has been released by the vendor, increasing the risk of zero-day exploitation. Administrators should monitor the plugin repository for updates and consider disabling the plugin until a fix is available.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
- Base Score: 5.3 (Medium)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: Low (C:L)
- Integrity Impact: None (I:N)
- Availability Impact: None (A:N)
Threat Level: Medium. The vulnerability allows unauthenticated access to restricted functionality, but the impact is limited to information disclosure or low-privilege actions. No public exploit code exists, but the lack of a patch makes it a target for threat actors.
Deep Dive & Mechanics
The vulnerability stems from improper authorization checks in the paid-member-subscriptions plugin. Specifically, the plugin fails to validate user permissions when processing certain AJAX requests or REST API endpoints. An attacker can send crafted HTTP requests to endpoints that should require authentication or specific user roles, bypassing access controls.
Root Cause: The plugin uses current_user_can() or similar checks inconsistently, or relies on nonces that can be bypassed. In versions <= 2.15.9, some functions are registered without proper capability checks, allowing unauthenticated users to trigger them.
Attack Vector: An unauthenticated attacker sends a GET or POST request to a vulnerable endpoint, such as:
/wp-admin/admin-ajax.php?action=pms_handle_member_subscription/wp-json/pms/v1/subscriptions
The server processes the request without verifying the user's role, leading to unauthorized access.
Impact: Attackers can view, modify, or delete subscription data, potentially exposing sensitive user information or disrupting membership services.
Vulnerable vs. Patched Code
Vulnerable Code (<= 2.15.9):
add_action('wp_ajax_nopriv_pms_handle_subscription', 'pms_handle_subscription');
function pms_handle_subscription() {
// No permission check
$user_id = $_POST['user_id'];
update_user_meta($user_id, 'pms_subscription_status', 'active');
}
Patched Code (Hypothetical):
add_action('wp_ajax_pms_handle_subscription', 'pms_handle_subscription');
add_action('wp_ajax_nopriv_pms_handle_subscription', 'pms_handle_subscription_unauth');
function pms_handle_subscription() {
if (!current_user_can('manage_options')) {
wp_die('Unauthorized', 403);
}
$user_id = intval($_POST['user_id']);
update_user_meta($user_id, 'pms_subscription_status', 'active');
}
function pms_handle_subscription_unauth() {
wp_die('Unauthorized', 403);
}
The patched version adds a capability check (current_user_can('manage_options')) and separates authenticated and unauthenticated handlers.
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Target WordPress site with Paid Member Subscriptions plugin <= 2.15.9
- Network access to the site
Exploitation Steps:
- Identify vulnerable endpoints using Shodan dorks or manual enumeration.
- Send a crafted request to trigger the missing authorization:
curl -X POST https://target.com/wp-admin/admin-ajax.php \
-d "action=pms_handle_subscription&user_id=1&subscription_status=active"
- Verify unauthorized access by checking if the subscription status changed without authentication.
Note: No public exploit code exists; this is a conceptual demonstration.
Blue Team (Detection & Defense)
Detection:
- Monitor for unusual AJAX requests to
admin-ajax.phpwithactionparameters related topms_. - Alert on requests to
/wp-json/pms/v1/endpoints without valid authentication tokens.
Defense:
- Disable the plugin until a patch is available.
- Implement Web Application Firewall (WAF) rules to block unauthenticated requests to plugin endpoints.
- Use a security plugin like Wordfence to add virtual patching.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
/wp-admin/admin-ajax.phpwithaction=pms_handle_subscriptionor similar. - POST data containing
user_idandsubscription_statusparameters.
- HTTP requests to
- File IOCs:
- Modified user meta entries for
pms_subscription_statuswithout corresponding admin actions.
- Modified user meta entries for
- Log IOCs:
- WordPress debug logs showing unauthorized access attempts to plugin functions.
Detection Engineering
YARA Rule
rule CVE_2025_58600_WordPress_Plugin {
meta:
description = "Detects vulnerable Paid Member Subscriptions plugin files"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-58600"
strings:
$vuln_func = "wp_ajax_nopriv_pms_" ascii wide nocase
$no_check = "current_user_can" ascii wide nocase
condition:
$vuln_func and not $no_check
}
Sigma Rule
title: CVE-2025-58600 - Missing Authorization in Paid Member Subscriptions
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects unauthenticated requests to vulnerable plugin endpoints
author: Valters IT
date: 2025/04/10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
cs-uri-query|contains: 'admin-ajax.php'
cs-uri-query|contains: 'action=pms_'
condition: selection
falsepositives:
- Legitimate admin actions (rare)
level: medium
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2025-58600 - Missing Authorization in Paid Member Subscriptions";
flow:to_server,established;
content:"POST"; http_method;
content:"admin-ajax.php"; http_uri;
content:"action=pms_"; http_client_body;
classtype:attempted-recon;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if not critical to operations.
- Apply virtual patching via WAF rules to block unauthenticated requests to plugin endpoints.
- Monitor logs for exploitation attempts.
Long-Term Fix:
- Wait for the vendor to release a patched version (>= 2.16.0).
- Once available, update the plugin immediately.
- Consider replacing the plugin with an alternative if no patch is forthcoming.
Workaround:
- Add custom code to
functions.phpto enforce authorization:
add_action('init', function() {
if (defined('DOING_AJAX') && DOING_AJAX) {
$action = $_REQUEST['action'] ?? '';
if (strpos($action, 'pms_') === 0 && !is_user_logged_in()) {
wp_die('Unauthorized', 403);
}
}
});
Valters IT
Securing Digital Frontiers
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.