CVE-2026-57377

Product Addons and Product Options With Custom Fields – WowAddons <= 1.6.8 - Missing Authorization

mediumMissing Authorization
5.3
CVSS Score
5.3
CVSS Score
medium
Severity
1.6.9
Patched in
8d
Time to patch

Description

The Product Addons and Product Options With Custom Fields – WowAddons plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in versions up to, and including, 1.6.8. This makes it possible for unauthenticated attackers to perform an unauthorized action.

CVSS Vector Breakdown

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
None
Confidentiality
Low
Integrity
None
Availability

Technical Details

Affected versions<=1.6.8
PublishedJuly 7, 2026
Last updatedJuly 14, 2026
Affected pluginproduct-addons

What Changed in the Fix

Changes introduced in v1.6.9

Loading patch diff...

Source Code

WordPress.org SVN
Research Plan
Unverified

# Exploitation Research Plan - CVE-2026-57377 ## 1. Vulnerability Summary The **Product Addons and Product Options With Custom Fields – WowAddons** plugin (versions <= 1.6.8) contains a **Missing Authorization** vulnerability in its REST API implementation. Specifically, the `hello_bar` endpoint fa…

Show full research plan

Exploitation Research Plan - CVE-2026-57377

1. Vulnerability Summary

The Product Addons and Product Options With Custom Fields – WowAddons plugin (versions <= 1.6.8) contains a Missing Authorization vulnerability in its REST API implementation. Specifically, the hello_bar endpoint fails to properly restrict access, allowing unauthenticated attackers to invoke the hello_bar_callback function. This function permits the setting of arbitrary transients in the WordPress database, which can be used to dismiss site-wide administrative notices or manipulate plugin state.

2. Attack Vector Analysis

  • Endpoint: /wp-json/prad/v1/hello_bar
  • HTTP Method: POST
  • Vulnerable Function: PRAD\Includes\Admin\Notice::hello_bar_callback
  • Parameters:
    • type: Must be exactly hello_bar to pass the conditional check.
    • id: The identifier for the transient to be created/updated (sanitized via sanitize_key).
  • Authentication: None (Unauthenticated).
  • Preconditions: The plugin must be active.

3. Code Flow

  1. Route Registration: In includes/admin/class-notice.php, the register_rest_route method is called during rest_api_init. It registers the prad/v1/hello_bar route.
  2. Missing Check: In affected versions (<= 1.6.8), the permission_callback for this route is either missing, returns true, or fails to check for an appropriate capability (like manage_options).
  3. Request Handling: An attacker sends a POST request to /wp-json/prad/v1/hello_bar.
  4. Callback Execution: The hello_bar_callback method is executed:
    • It retrieves type and id from the request parameters.
    • It checks if type === 'hello_bar'.
    • If true, it calls Xpo::set_transient_without_cache( $id, 'hide', 1296000 );.
  5. Data Sink: Xpo::set_transient_without_cache writes a transient to the wp_options table (prefixed with _transient_) with the value hide.

4. Nonce Acquisition Strategy

This vulnerability is located in a REST API endpoint that lacks authorization. By default, WordPress REST API endpoints do not require a nonce for unauthenticated access if the permission_callback is not enforcing one.

Conclusion: No nonce is required for this exploitation.

5. Exploitation Strategy

The goal is to demonstrate that an unauthenticated user can set a transient that suppresses a site-wide notice.

Step-by-Step Plan:

  1. Target Identification: Identify a target transient ID used by the plugin. According to get_hellobar_config() in includes/admin/class-notice.php, valid IDs include:
    • prad_helloBar_summer1_flash_sale_2026_1
  2. Malicious Request: Send an unauthenticated POST request to the REST API.
  3. Trigger: Use the http_request tool to perform the action.

Payload Detail:

  • URL: http://<target>/wp-json/prad/v1/hello_bar
  • Method: POST
  • Headers: Content-Type: application/x-www-form-urlencoded
  • Body: type=hello_bar&id=prad_helloBar_summer1_flash_sale_2026_1

6. Test Data Setup

  1. Install Plugin: Ensure product-addons version 1.6.8 is installed and active.
  2. Verify Baseline: Check that the transient prad_helloBar_summer1_flash_sale_2026_1 does not exist yet.

7. Expected Results

  • Response: The server should return a 200 OK status with a JSON body:
    {
        "success": true,
        "message": "Hello Bar Action performed"
    }
    
  • Database Change: A new entry will appear in the wp_options table with the key _transient_prad_helloBar_summer1_flash_sale_2026_1 and the value hide.

8. Verification Steps

After sending the HTTP request, verify the transient state via WP-CLI:

# Check if the transient is set to 'hide'
wp transient get prad_helloBar_summer1_flash_sale_2026_1

# Alternatively, check the options table directly
wp option get _transient_prad_helloBar_summer1_flash_sale_2026_1

The output should be hide.

9. Alternative Approaches

If the hello_bar endpoint is patched or behaves differently, check for other routes registered in register_rest_route. The source snippet shows an array-based loop for routes; if other endpoints like set_dismiss_notice were added in the same file without permission_callback, they would also be vulnerable.

Another test is to use an arbitrary id to prove generic transient injection:

  • Body: type=hello_bar&id=cve_poc_test_id
  • Verification: wp transient get cve_poc_test_id (should return hide).
Research Findings
Static analysis — not yet PoC-verified

Summary

The WowAddons Product Addons plugin for WordPress is vulnerable to unauthorized transient manipulation due to a missing or inadequate authorization check on its REST API. Unauthenticated attackers can exploit the 'prad/v1/hello_bar' endpoint to set arbitrary WordPress transients to the value 'hide', allowing them to suppress site-wide administrative notices or interfere with plugin state.

Vulnerable Code

// includes/admin/class-notice.php line 39
	public function register_rest_route() {
		$routes = array(
			// Hello Bar.
			array(
				'endpoint'            => 'hello_bar',
				'methods'             => 'POST',
				'callback'            => array( $this, 'hello_bar_callback' ),
				'permission_callback' => function () {
					return current_user_can( Xpo::prad_manage_admin_permisson_handler() );
				},
			),
		);

---

// includes/admin/class-notice.php line 82
	public function hello_bar_callback( \WP_REST_Request $request ) {
		$request_params = $request->get_params();
		$type           = isset( $request_params['type'] ) ? sanitize_text_field( $request_params['type'] ) : '';
		$id             = isset( $request_params['id'] ) ? sanitize_key( $request_params['id'] ) : '';

		if ( 'hello_bar' === $type && ! empty( $id ) ) {
			Xpo::set_transient_without_cache( $id, 'hide', 1296000 );
		}

		return new \WP_REST_Response(
			array(
				'success' => true,
				'message' => __( 'Hello Bar Action performed', 'product-addons' ),
			),
			200
		);
	}

Security Fix

--- includes/admin/class-notice.php
+++ includes/admin/class-notice.php
@@ -45,7 +45,7 @@
 				'endpoint'            => 'hello_bar',
 				'methods'             => 'POST',
 				'callback'            => array( $this, 'hello_bar_callback' ),
-				'permission_callback' => function () {
-					return current_user_can( Xpo::prad_manage_admin_permisson_handler() );
-				},
+				'permission_callback' => function () {
+					return current_user_can( 'manage_options' );
+				},
 			),

Exploit Outline

An unauthenticated attacker can manipulate the site's transients by sending a POST request to the '/wp-json/prad/v1/hello_bar' REST API endpoint. The request must include a 'type' parameter set to 'hello_bar' and an 'id' parameter containing the name of the transient to be set (e.g., 'prad_helloBar_summer1_flash_sale_2026_1'). Because the 'permission_callback' either lacks a strict capability check or fails to validate for administrative privileges, the plugin will execute the 'hello_bar_callback' function and call 'set_transient', writing the value 'hide' to the specified option in the WordPress database. This can be used to bypass administrative UI notices or interfere with other transient-based logic.

Check if your site is affected.

Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.