CVE-2025-30959
Executive Summary
CVE-2025-30959 is a Missing Authorization vulnerability (CWE-862) in the WordPress plugin Product XML Feed Manager for WooCommerce by WPFactory. This flaw allows unauthenticated attackers to exploit incorrectly configured access control security levels, potentially leading to unauthorized access to XML feed data or manipulation of feed settings. The vulnerability affects all versions up to and including 2.9.2. As of this report, no official patch has been released, and no public proof-of-concept (PoC) or exploit code is available. The EPSS score is 0.0%, indicating a low probability of active exploitation in the wild at this time, but the risk remains significant due to the widespread use of WooCommerce.
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. Users who installed the plugin via the WordPress admin dashboard or directly from the repository are affected. No supply chain compromise has been identified, but the lack of a patch means users must rely on manual mitigation or disabling the plugin.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
- Base Score: 6.5 (Medium)
- Attack Vector: Network (AV:N) – The vulnerability can be exploited remotely.
- Attack Complexity: Low (AC:L) – No special conditions are required.
- Privileges Required: None (PR:N) – No authentication needed.
- User Interaction: None (UI:N) – No user action required.
- Scope: Unchanged (S:U) – The exploit cannot affect other components.
- Confidentiality Impact: Low (C:L) – Limited data exposure possible.
- Integrity Impact: Low (I:L) – Limited data modification possible.
- Availability Impact: None (A:N) – No denial of service.
Threat Level: Medium. While the CVSS score is 6.5, the lack of a patch and the potential for unauthorized access to WooCommerce product feeds (which may contain sensitive pricing or inventory data) elevate the risk for e-commerce sites.
Deep Dive & Mechanics
The vulnerability stems from missing authorization checks in the plugin's AJAX handlers or REST API endpoints. The plugin likely exposes functions to generate, view, or manage XML product feeds without verifying that the requesting user has the appropriate capabilities (e.g., manage_woocommerce or edit_posts). An unauthenticated attacker can send crafted HTTP requests to these endpoints to:
- Retrieve XML feeds containing product data (prices, descriptions, SKUs).
- Modify feed settings (e.g., change feed URLs, add malicious content).
- Potentially trigger other actions if the plugin uses insecure deserialization or file operations.
The specific vulnerable endpoint is not publicly documented, but common patterns in WooCommerce plugins include:
/wp-admin/admin-ajax.php?action=wpfactory_xml_feed_action/wp-json/wpfactory/v1/feed
Vulnerable vs. Patched Code
Since no patch is available, a hypothetical fix would involve adding capability checks to all AJAX and REST endpoints. Below is an example of vulnerable vs. patched code.
Vulnerable Code (PHP):
add_action('wp_ajax_nopriv_wpfactory_get_feed', 'wpfactory_get_feed');
add_action('wp_ajax_wpfactory_get_feed', 'wpfactory_get_feed');
function wpfactory_get_feed() {
// No capability check
$feed_id = $_GET['feed_id'];
$feed_data = get_feed_data($feed_id);
echo json_encode($feed_data);
wp_die();
}
Patched Code (PHP):
add_action('wp_ajax_nopriv_wpfactory_get_feed', 'wpfactory_get_feed');
add_action('wp_ajax_wpfactory_get_feed', 'wpfactory_get_feed');
function wpfactory_get_feed() {
// Check if user has proper capability
if (!current_user_can('manage_woocommerce')) {
wp_die('Unauthorized', 403);
}
$feed_id = $_GET['feed_id'];
$feed_data = get_feed_data($feed_id);
echo json_encode($feed_data);
wp_die();
}
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Target WordPress site with Product XML Feed Manager for WooCommerce <= 2.9.2.
- No authentication required.
Exploitation Steps:
- Identify the vulnerable endpoint. Common candidates:
/wp-admin/admin-ajax.php?action=wpfactory_get_feed&feed_id=1/wp-json/wpfactory/v1/feed/1
- Send a GET request to the endpoint without any authentication headers.
- If successful, the response will contain XML feed data (product info, prices, etc.).
Example cURL command:
curl -v "http://target.com/wp-admin/admin-ajax.php?action=wpfactory_get_feed&feed_id=1"
Expected Response (if vulnerable):
{
"feed_id": 1,
"feed_name": "Google Shopping",
"products": [
{"sku": "PROD001", "price": "19.99", "name": "Widget"}
]
}
Blue Team (Detection & Hardening)
Detection:
- Monitor for unusual requests to
/wp-admin/admin-ajax.phpwith parameters likeaction=wpfactory_*from unauthenticated sources. - Look for spikes in 403 errors if a WAF is blocking unauthorized access.
Hardening:
- Disable the plugin until a patch is available.
- Implement a Web Application Firewall (WAF) rule to block unauthenticated access to plugin-specific AJAX actions.
- Use a security plugin like Wordfence to add virtual patching.
Indicators of Compromise (IOCs)
- Network IOCs:
- HTTP requests to
/wp-admin/admin-ajax.phpwithaction=wpfactory_*and noCookieheader. - Requests to
/wp-json/wpfactory/v1/*without authentication tokens.
- HTTP requests to
- File IOCs:
- Modified plugin files in
/wp-content/plugins/product-xml-feeds-for-woocommerce/. - Unexpected XML feed files in the uploads directory.
- Modified plugin files in
- Log IOCs:
- WordPress debug logs showing
wp_diecalls with "Unauthorized" (if patched). - Web server access logs with 200 responses to unauthenticated AJAX requests.
- WordPress debug logs showing
Detection Engineering
YARA Rule
rule CVE_2025_30959_WordPress_Plugin {
meta:
description = "Detects exploitation attempts for CVE-2025-30959 in Product XML Feed Manager for WooCommerce"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-30959"
strings:
$ajax_action = "action=wpfactory_" nocase
$rest_path = "/wpfactory/v1/" nocase
$feed_param = "feed_id=" nocase
condition:
any of them
}
Sigma Rule
title: CVE-2025-30959 Exploitation Attempt
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects unauthenticated requests to vulnerable Product XML Feed Manager endpoints
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains:
- 'action=wpfactory_'
- '/wpfactory/v1/'
condition: selection
falsepositives:
- Legitimate admin requests (should have authentication cookies)
level: high
Suricata Rule
alert http any any -> $HOME_NET any (
msg:"CVE-2025-30959 - Product XML Feed Manager Missing Authorization Attempt";
flow:to_server,established;
content:"GET"; http_method;
content:"action=wpfactory_"; http_uri;
sid:1000001;
rev:1;
reference:cve,2025-30959;
classtype:attempted-recon;
priority:2;
)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin if it is not critical to business operations.
- Apply virtual patching via a WAF (e.g., Wordfence, Cloudflare) to block unauthenticated requests to plugin endpoints.
- Monitor logs for exploitation attempts.
Long-Term Fix:
- Await an official patch from WPFactory. Once released, update to the patched version immediately.
- If the plugin is abandoned, consider replacing it with an alternative XML feed manager that is actively maintained.
Valters IT Signature: This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.
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.