Fraud Prevention For Woocommerce <= 2.3.2 - Authenticated (Subscriber+) Information Exposure
Description
The Fraud Prevention For WooCommerce and EDD plugin for WordPress is vulnerable to Sensitive Information Exposure in all versions up to, and including, 2.3.2. This makes it possible for authenticated attackers, with Subscriber-level access and above, to extract sensitive user or configuration data.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:NTechnical Details
<=2.3.2What Changed in the Fix
Changes introduced in v2.3.3
Source Code
WordPress.org SVN# Research Plan: CVE-2026-24553 - Information Exposure in Fraud Prevention For WooCommerce ## 1. Vulnerability Summary The "Fraud Prevention For WooCommerce and EDD" plugin (<= 2.3.2) suffers from a sensitive information exposure vulnerability. The plugin registers several AJAX actions intended for…
Show full research plan
Research Plan: CVE-2026-24553 - Information Exposure in Fraud Prevention For WooCommerce
1. Vulnerability Summary
The "Fraud Prevention For WooCommerce and EDD" plugin (<= 2.3.2) suffers from a sensitive information exposure vulnerability. The plugin registers several AJAX actions intended for administrative use (like exporting settings and viewing dashboard reports) but fails to implement proper capability checks. This allows authenticated users with Subscriber-level permissions to trigger these actions. By exploiting this, an attacker can extract the plugin's configuration, which includes blacklisted IP addresses, email patterns, and potentially other sensitive store security configurations.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-ajax.php - Action:
wcblu_export_lite_settings(for exporting configuration/blacklist) orwcblu_get_dashboard_data(for viewing report metrics). - Method:
POST(standard for WordPress AJAX). - Parameters:
action:wcblu_export_lite_settingsnonce: A valid nonce for thewcblu-ajax-nonceaction.
- Authentication: Required (Subscriber or higher).
- Preconditions: The attacker must be logged in and able to retrieve a valid nonce.
3. Code Flow
- Entry Point: The
admin_enqueue_scriptshook (implemented asenqueue_scriptsinclass-woocommerce-blocker-prevent-fake-orders-and-blacklist-fraud-customers-admin.php) registers and localizes scripts. - Nonce Generation: Inside
enqueue_scripts, the plugin callswp_create_nonce( 'wcblu-ajax-nonce' )and assigns it to theadminajaxJavaScript object:wp_localize_script( 'jquery-wblp-order-widget-js', 'adminajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'wcblu-ajax-nonce' ), ) ); - AJAX Registration: The plugin registers AJAX handlers (likely in the truncated part of the admin class or a loader) using
add_action( 'wp_ajax_wcblu_export_lite_settings', ... ). - Vulnerable Sink: The handler for
wcblu_export_lite_settingschecks the nonce usingcheck_ajax_referer( 'wcblu-ajax-nonce', 'nonce' )but fails to callcurrent_user_can( 'manage_options' ). - Output: The handler then fetches the plugin options (e.g.,
get_option( 'wcblu_settings' )) and returns them as a JSON response.
4. Nonce Acquisition Strategy
The nonce is localized on several admin pages defined in the $valid_hooks and $order_blacklist arrays. To exploit this as a Subscriber, we must find if any of these pages are accessible to the read capability or if the plugin misconfigures a menu.
- Target Page:
wp-admin/admin.php?page=wcblu-dashboard(The "Fraud Prevention" dashboard). - Method:
- Navigate to the dashboard as a Subscriber.
- Use
browser_evalto extract the nonce from theadminajaxobject.
- JavaScript:
window.adminajax?.nonce - Note: If the dashboard is correctly protected by
manage_options, we will check if the plugin enqueues these scripts on the Subscriber's profile page (profile.php) or if any other menu item (likewblp-get-started) is incorrectly granted to thereadcapability.
5. Exploitation Strategy
- Authentication: Log in to the WordPress instance as a Subscriber.
- Nonce Retrieval:
- Navigate to
/wp-admin/admin.php?page=wcblu-dashboard. - Execute
browser_eval("adminajax.nonce")to get the token.
- Navigate to
- Data Extraction: Send a POST request to
admin-ajax.phpto dump the settings.- URL:
http://localhost:8080/wp-admin/admin-ajax.php - Headers:
Content-Type: application/x-www-form-urlencoded - Body:
action=wcblu_export_lite_settings&nonce=[NONCE]
- URL:
- Data Analysis: The response will be a JSON object containing the
wcblu_settings, which typically includes theblacklist_emails,blacklist_ips, andblacklist_zipcodes.
6. Test Data Setup
- Administrator Actions:
- Go to Fraud Prevention > Blacklist Settings.
- Add
evil-attacker@example.comto the "Blacklisted Emails". - Add
1.3.3.7to the "Blacklisted IPs". - Save settings.
- User Creation:
- Create a user
attacker_subwith theSubscriberrole.
- Create a user
- Confirm Plugin State:
- Verify
get_option('wcblu_settings')contains the test data using WP-CLI.
- Verify
7. Expected Results
A successful exploit will return a JSON response with success: true and a data field containing a serialized or JSON-encoded string of the plugin's configuration. This configuration will expose the blacklisted email (evil-attacker@example.com) and IP (1.3.3.7).
8. Verification Steps
- HTTP Check: Verify the HTTP response status is
200 OKand the body contains the stringevil-attacker@example.com. - Database Comparison: Use WP-CLI to confirm the output matches the actual plugin settings:
wp option get wcblu_settings --format=json
9. Alternative Approaches
If wcblu_export_lite_settings is not the correct action name (it varies between lite versions), try:
wcblu_export_settingswcblu_get_dashboard_data(This might return a summary of fraud attempts, exposing customer transaction amounts or emails).- Check the HTML source of the dashboard page for a hidden input named
wcblu_export_actionwhich contains the dynamic action name:browser_eval("document.querySelector('input[name=\"wcblu_export_action\"]')?.value")
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.