BEAR – Bulk Editor and Products Manager Professional for WooCommerce by Pluginus.Net <= 1.1.5 - Cross-Site Request Forgery to Product Data Modification
Description
The BEAR – Bulk Editor and Products Manager Professional for WooCommerce by Pluginus.Net plugin for WordPress is vulnerable to Cross-Site Request Forgery in all versions up to, and including, 1.1.5. This is due to missing nonce validation on the woobe_redraw_table_row() function. This makes it possible for unauthenticated attackers to update WooCommerce product data including prices, descriptions, and other product fields via a forged request granted they can trick a site administrator or shop manager into performing an action such as clicking on a link.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:NTechnical Details
<=1.1.5This plan outlines the research and exploitation strategy for **CVE-2026-1672**, a Cross-Site Request Forgery (CSRF) vulnerability in the **BEAR – Bulk Editor and Products Manager Professional for WooCommerce** plugin. --- ### 1. Vulnerability Summary The **BEAR (Bulk Editor and Products Manager)*…
Show full research plan
This plan outlines the research and exploitation strategy for CVE-2026-1672, a Cross-Site Request Forgery (CSRF) vulnerability in the BEAR – Bulk Editor and Products Manager Professional for WooCommerce plugin.
1. Vulnerability Summary
The BEAR (Bulk Editor and Products Manager) plugin (formerly WOOBE) allows for mass editing of WooCommerce products. The vulnerability exists in the woobe_redraw_table_row() function (likely located in the main plugin class or an AJAX handler class). This function is hooked to the wp_ajax_woobe_redraw_table_row action.
The function fails to implement a nonce check (using check_ajax_referer or wp_verify_nonce). While the function is intended to simply return the HTML for a specific product row after an update, it appears to process or trust input parameters in a way that allows modification of product data (e.g., price, title, SKU) via CSRF if an attacker can trick an administrator into sending a crafted request.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-ajax.php - Action:
woobe_redraw_table_row - Method: POST (standard for WordPress AJAX)
- Vulnerable Parameter(s):
product_id, and parameters related to field values (likely passed via$_REQUEST). - Authentication Level: Requires an active session of a user with
shop_manageroradministratorroles. - Preconditions: The victim must be logged into the WordPress admin panel.
3. Code Flow (Inferred)
- Registration: The plugin registers the AJAX hook:
add_action('wp_ajax_woobe_redraw_table_row', array($this, 'woobe_redraw_table_row')); - Entry Point: An AJAX request is sent to
admin-ajax.phpwithaction=woobe_redraw_table_row. - Vulnerable Logic: Inside
woobe_redraw_table_row():- The code retrieves
product_idfrom$_REQUEST['product_id']. - The code retrieves field data. In some versions of this plugin, the "redraw" logic is used to commit changes to the database before returning the new HTML, or it calls an internal save method without verifying nonces.
- The
WC_Productobject is instantiated and updated based on the provided request parameters.
- The code retrieves
- Missing Check: The function lacks
check_ajax_referer('woobe_nonce', 'nonce')or similar validation, allowing any cross-site request to trigger the execution.
4. Nonce Acquisition Strategy
According to the vulnerability description, the woobe_redraw_table_row function missing nonce validation. Therefore, no nonce should be required to successfully execute the state-changing operation.
If a nonce is present but the check is weak (e.g., uses -1 or is conditional), the agent should check the global JS variables in the admin dashboard:
- Variable Name:
woobe_varsorwoobe_settings(common localization keys for this plugin). - Key:
nonceorwoobe_nonce. - Acquisition:
- Navigate to the Products Bulk Editor page:
/wp-admin/admin.php?page=woobe. - Run
browser_eval("window.woobe_vars?.nonce").
- Navigate to the Products Bulk Editor page:
5. Exploitation Strategy
The goal is to change a product's price via a CSRF-style POST request.
Step-by-Step Plan:
- Identify Target Product: Get the ID of an existing WooCommerce product.
- Craft Payload: The payload must target
admin-ajax.php. Based on plugin structure, we need to identify the exact parameter name used for field updates. Common parameters in BEAR:field,value,product_id. - Execute Request: Use
http_requestto simulate the admin performing the action.
Example Payload (Draft):
- URL:
http://localhost:8080/wp-admin/admin-ajax.php - Method: POST
- Headers:
Content-Type: application/x-www-form-urlencoded - Body:
(Note: The exact parameter names for the "value" may beaction=woobe_redraw_table_row&product_id=[ID]&field=regular_price&value=0.01$_REQUEST['value']or nested in an array. The agent should verify this by grep-ing the function body in the source code first.)
6. Test Data Setup
- WooCommerce: Ensure WooCommerce is installed and configured.
- Product: Create a product with a known price:
wp eval "wc_create_product(array('name' => 'Test Product', 'regular_price' => '100'));" - Identify ID: Get the product ID using
wp post list --post_type=product. - Plugin Setup: Ensure "BEAR Bulk Editor" is active.
7. Expected Results
- The server responds with a
200 OKand a chunk of HTML representing the updated table row. - The product price in the database is changed to the value specified in the attack payload.
8. Verification Steps
After sending the http_request, verify the change using WP-CLI:
# Check the product price
wp post get [PRODUCT_ID] --field=post_id
wp eval "echo get_post_meta([PRODUCT_ID], '_regular_price', true);"
If the output is 0.01 (or your chosen value), the CSRF is successful.
9. Alternative Approaches
If woobe_redraw_table_row only renders data but doesn't save it, the vulnerability description implies that the act of calling the redraw might be coupled with a save operation or that there's a sibling function.
- Alternative 1: Search for
woobe_save_product_dataorwoobe_update_page_field. If these also lack nonce checks, they are viable targets. - Alternative 2: If the price is updated via a specific metadata field, the payload might look like:
action=woobe_redraw_table_row&product_id=[ID]&field=title&value=HACKED.
10. Source Code Investigation (Grep Commands)
The agent should start by running these to confirm identifiers:
# Find the AJAX handler
grep -rn "wp_ajax_woobe_redraw_table_row" .
# Examine the function body for parameter names and missing nonce checks
grep -rn "function woobe_redraw_table_row" . -A 50
# Check for localized script data to find nonce variable names (if any)
grep -rn "wp_localize_script" . -A 10 | grep "nonce"
Summary
The BEAR Bulk Editor plugin for WooCommerce is vulnerable to Cross-Site Request Forgery (CSRF) because it fails to validate nonces in the woobe_redraw_table_row AJAX handler. This allows unauthenticated attackers to modify product details, such as prices and titles, by tricking a logged-in administrator into interacting with a malicious link or site.
Vulnerable Code
// File: classes/woobe.php (or similar AJAX handler) add_action('wp_ajax_woobe_redraw_table_row', array($this, 'woobe_redraw_table_row')); public function woobe_redraw_table_row() { // No check_ajax_referer or wp_verify_nonce check is present here $product_id = intval($_REQUEST['product_id']); // The function continues to process $_REQUEST parameters and updates // the product data before rendering the updated row HTML. $field = $_REQUEST['field']; $value = $_REQUEST['value']; // ... logic that modifies WC_Product data ...
Security Fix
@@ -120,4 +120,5 @@ public function woobe_redraw_table_row() { + check_ajax_referer('woobe_nonce', 'nonce'); $product_id = intval($_REQUEST['product_id']);
Exploit Outline
The exploit targets the AJAX endpoint /wp-admin/admin-ajax.php using a CSRF attack. An attacker crafts a malicious web page that automatically sends a POST request with the 'action' parameter set to 'woobe_redraw_table_row'. To modify product data, the payload includes 'product_id' (the target product), 'field' (the metadata field to change, such as 'regular_price'), and 'value' (the new data, such as '0.01'). Because the plugin lacks nonce validation for this action, the request will execute successfully if an authenticated Shop Manager or Administrator visits the malicious page while logged into the WordPress dashboard.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.