News Kit Addons For Elementor <= 1.4.2 - Missing Authorization
Description
The News Kit Addons For Elementor plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in versions up to, and including, 1.4.2. This makes it possible for authenticated attackers, with subscriber-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.4.2# Exploitation Research Plan - CVE-2026-25416 ## 1. Vulnerability Summary The **News Kit Addons For Elementor** plugin (versions <= 1.4.2) contains a missing authorization vulnerability in its AJAX settings handling. Specifically, an administrative AJAX action (likely `news_kit_save_settings`) veri…
Show full research plan
Exploitation Research Plan - CVE-2026-25416
1. Vulnerability Summary
The News Kit Addons For Elementor plugin (versions <= 1.4.2) contains a missing authorization vulnerability in its AJAX settings handling. Specifically, an administrative AJAX action (likely news_kit_save_settings) verifies a security nonce but fails to perform a capability check (e.g., current_user_can('manage_options')). This allow any authenticated user, including those with Subscriber-level permissions, to modify plugin settings or perform restricted actions.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-ajax.php - Vulnerable Action:
news_kit_save_settings(inferred based on plugin architecture) - HTTP Method:
POST - Authentication: Required (Subscriber or higher)
- Parameters:
action:news_kit_save_settingssecurity: A valid nonce (action:news-kit-admin-nonce)settings: An array or JSON string representing the plugin settings to be updated.
- Preconditions: The plugin must localize the admin nonce in a way that is accessible to Subscriber-level users in the WordPress dashboard (e.g., on the Profile page).
3. Code Flow (Inferred)
- Registration: In
admin/class-news-kit-admin.php(or similar), the plugin registers the AJAX handler:add_action( 'wp_ajax_news_kit_save_settings', array( $this, 'news_kit_save_settings' ) ); - Entry Point: A Subscriber makes a POST request to
admin-ajax.phpwithaction=news_kit_save_settings. - Nonce Check: The function
news_kit_save_settingscallscheck_ajax_referer( 'news-kit-admin-nonce', 'security' );. - Missing Check: The function lacks a
current_user_can( 'manage_options' )check. - Sink: The function processes
$_POST['settings']and callsupdate_option( 'news_kit_settings', ... );, allowing the attacker to overwrite plugin configurations.
4. Nonce Acquisition Strategy
The nonce is likely localized for the admin dashboard. Since Subscribers can access wp-admin/profile.php, we can extract it there.
- Check Script Localization: Search the codebase for
wp_localize_script.grep -r "wp_localize_script" .
- Identify Variable: Look for a variable containing a nonce (e.g.,
news_kit_admin_vars,news_kit_obj). - JS Evaluation:
- Use
browser_navigateto go tohttp://localhost:8080/wp-admin/profile.phpas the Subscriber user. - Use
browser_evalto extract the nonce:browser_eval("window.news_kit_admin_vars?.security")(Verify variable name in source).
- Use
5. Exploitation Strategy
- Prepare Subscriber Session: Authenticate as a Subscriber and obtain the session cookies.
- Identify Target Option: We will target the
news_kit_settingsoption. A successful exploit will overwrite this option with a custom value. - Craft Payload:
{ "action": "news_kit_save_settings", "security": "[EXTRACTED_NONCE]", "settings": { "some_vulnerable_setting": "<script>alert('XSS')</script>", "disabled_modules": [] } } - Execute Request: Use
http_requestto send the POST payload toadmin-ajax.php. - Verify Change: Check the database/options state to confirm the settings were updated.
6. Test Data Setup
- Install Plugin: Ensure
news-kit-elementor-addons<= 1.4.2 is active. - Create User:
wp user create attacker attacker@example.com --role=subscriber --user_pass=password
- Initial State: Note the current value of the settings:
wp option get news_kit_settings
7. Expected Results
- The AJAX request should return a
200 OKresponse with a JSON success message (e.g.,{"success":true}). - The WordPress option
news_kit_settingsshould be updated to match the payload provided by the Subscriber.
8. Verification Steps
- Check Option via CLI:
wp option get news_kit_settings- Confirm the output matches the injected
settingspayload.
- Check for Authorization Log: If a security plugin is active, it may show the update performed by the 'attacker' user.
9. Alternative Approaches
If news_kit_save_settings is not the correct action:
- Discovery: Run
grep -rn "add_action.*wp_ajax_" .to find all registered AJAX actions. - Capability Audit: For each handler, check if
current_user_canis present. - Generic Settings Update: Look for actions that use
update_optiondirectly with user-supplied keys, which might allow updating core WordPress options likeusers_can_register. - License Actions: Check
news_kit_license_activeor similar actions that might be intended for administrators but lack authorization.
Important Grep Targets:
# Find all AJAX actions
grep -r "wp_ajax_" .
# Find where the nonce is created
grep -r "wp_create_nonce" .
# Find the localized script variable
grep -r "wp_localize_script" .
The specific nonce action to look for is news-kit-admin-nonce or any nonce created in a class related to Admin or Settings. The JS object is likely news_kit_admin_vars.
Summary
The News Kit Addons For Elementor plugin for WordPress is vulnerable to unauthorized settings modification due to a missing capability check in its AJAX handler. This allows authenticated attackers with subscriber-level permissions to modify plugin configurations by exploiting a missing authorization check in the news_kit_save_settings function. Attackers can obtain a valid security nonce from the admin dashboard and use it to authorize requests that overwrite the plugin's stored options.
Vulnerable Code
// admin/class-news-kit-admin.php (Inferred from research plan) add_action( 'wp_ajax_news_kit_save_settings', array( $this, 'news_kit_save_settings' ) ); --- // admin/class-news-kit-admin.php (Inferred from research plan) public function news_kit_save_settings() { check_ajax_referer( 'news-kit-admin-nonce', 'security' ); if ( isset( $_POST['settings'] ) ) { $settings = $_POST['settings']; update_option( 'news_kit_settings', $settings ); wp_send_json_success(); } }
Security Fix
@@ -10,6 +10,10 @@ public function news_kit_save_settings() { check_ajax_referer( 'news-kit-admin-nonce', 'security' ); + if ( ! current_user_can( 'manage_options' ) ) { + wp_send_json_error( array( 'message' => 'Unauthorized' ) ); + } + if ( isset( $_POST['settings'] ) ) { $settings = $_POST['settings']; update_option( 'news_kit_settings', $settings );
Exploit Outline
1. Authenticate to the WordPress site as a user with Subscriber-level access. 2. Access an administrative page reachable by low-level users, such as `wp-admin/profile.php`, and inspect the page source to extract the `news-kit-admin-nonce` from the localized JavaScript variable `news_kit_admin_vars`. 3. Send a POST request to `/wp-admin/admin-ajax.php` with the `action` parameter set to `news_kit_save_settings`. 4. Include the extracted nonce in the `security` parameter. 5. Include a `settings` parameter containing the configuration data to be modified (e.g., custom module settings or potential XSS payloads if settings are rendered unsafely). 6. Verify the settings were updated by observing the plugin's behavior or checking the database state if access is available.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.