Envo Extra <= 1.9.13 - Missing Authorization
Description
The Envo Extra plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in versions up to, and including, 1.9.13. This makes it possible for authenticated attackers, with contributor-level access and above, to perform an unauthorized action.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:NTechnical Details
<=1.9.13What Changed in the Fix
Changes introduced in v1.9.14
Source Code
WordPress.org SVN```markdown # Exploitation Research Plan - CVE-2026-32386 (Envo Extra <= 1.9.13) ## 1. Vulnerability Summary The **Envo Extra** plugin for WordPress (versions <= 1.9.13) contains a missing authorization vulnerability in its AJAX handlers. Specifically, functions registered via `wp_ajax_` (authentic…
Show full research plan
# Exploitation Research Plan - CVE-2026-32386 (Envo Extra <= 1.9.13)
## 1. Vulnerability Summary
The **Envo Extra** plugin for WordPress (versions <= 1.9.13) contains a missing authorization vulnerability in its AJAX handlers. Specifically, functions registered via `wp_ajax_` (authenticated AJAX) fail to perform a capability check (e.g., `current_user_can('manage_options')`) before executing actions that modify plugin settings or global site options. This allows authenticated users with low-level privileges (Contributor and above) to perform unauthorized actions, such as dismissing site-wide notifications or potentially modifying minor plugin states.
## 2. Attack Vector Analysis
- **Endpoint**: `/wp-admin/admin-ajax.php`
- **Action**: `envo_extra_dismiss_notice` (registered in the notification system)
- **HTTP Method**: POST
- **Authentication**: Required (Contributor level or higher)
- **Parameters**:
- `action`: `envo_extra_dismiss_notice`
- `security`: A valid WordPress nonce (check `envo_extra_nonce` in localized JS)
- `notice_id`: The ID of the notice to dismiss (e.g., `review`, `import`, or `maybe_later`)
- **Preconditions**: The attacker must be logged in as at least a Contributor to access the admin dashboard and obtain a valid nonce.
Summary
The Envo Extra plugin for WordPress fails to perform an authorization check in its AJAX handler for dismissing notifications in versions up to and including 1.9.13. This allows authenticated users with Contributor-level access or higher to hide administrative site-wide notices without proper permissions.
Vulnerable Code
// lib/envothemes-demo-import/envothemes-demo-import.php line 117 require_once( ENVO_PATH . 'includes/notify/notify.php' ); --- // The handler registration (referenced in lib/envothemes-demo-import/envothemes-demo-import.php via notify.php) // fails to check capabilities before updating site options. // add_action( 'wp_ajax_envo_extra_dismiss_notice', 'envo_extra_dismiss_notice' ); // function envo_extra_dismiss_notice() { // check_ajax_referer( 'envo_extra_nonce', 'security' ); // // Missing: current_user_can( 'manage_options' ) // update_option( 'envothemes_' . $_POST['notice_id'] . '_dismiss', true ); // wp_die(); // }
Security Fix
@@ -3,7 +3,7 @@ * Plugin Name: Envo Extra * Plugin URI: https://envothemes.com/ * Description: Extra addon for EnvoThemes Themes - * Version: 1.9.13 + * Version: 1.9.14 * Author: EnvoThemes * Author URI: https://envothemes.com/ * License: GPL-2.0+ @@ -56,6 +56,9 @@ add_action( 'wp_enqueue_scripts', 'envo_extra_scripts' ); +function envo_extra_admin_scripts() { + wp_enqueue_script( 'preview-script-elmn', ENVO_EXTRA_PLUGIN_URL . 'lib/elementor/assets/js/elementor.js', [ ], ELEMENTOR_VERSION, true ); +} //Dequeue Styles function envo_extra_dequeue_unnecessary_styles() { $value = get_theme_mod( 'main_typographydesktop', array() ); ... (truncated)
Exploit Outline
To exploit this vulnerability, an attacker must first be logged in with at least Contributor-level privileges. The attacker needs to obtain a valid AJAX nonce (envo_extra_nonce), which is commonly found in the localized JavaScript variables of the WordPress admin dashboard. The attacker then sends a POST request to the /wp-admin/admin-ajax.php endpoint with the 'action' set to 'envo_extra_dismiss_notice', the 'security' parameter set to the retrieved nonce, and the 'notice_id' parameter set to the ID of the notice they wish to dismiss (e.g., 'review'). Due to the lack of a capability check using current_user_can(), the plugin updates the site's options to mark the notice as dismissed, effectively modifying administrative plugin state without authorization.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.