[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f9ePm8mUC34JF_uauTf4RpVb-lMwOUgx1XvJWFtOLcVQ":3},{"id":4,"url_slug":5,"title":6,"description":7,"plugin_slug":8,"theme_slug":9,"affected_versions":10,"patched_in_version":11,"severity":12,"cvss_score":13,"cvss_vector":14,"vuln_type":15,"published_date":16,"updated_date":17,"references":18,"days_to_patch":20,"patch_diff_files":21,"patch_trac_url":9,"research_status":22,"research_verified":23,"research_rounds_completed":24,"research_plan":25,"research_summary":26,"research_vulnerable_code":9,"research_fix_diff":9,"research_exploit_outline":27,"research_model_used":28,"research_started_at":29,"research_completed_at":30,"research_error":9,"poc_status":9,"poc_video_id":9,"poc_summary":9,"poc_steps":9,"poc_tested_at":9,"poc_wp_version":9,"poc_php_version":9,"poc_playwright_script":9,"poc_exploit_code":9,"poc_has_trace":23,"poc_model_used":9,"poc_verification_depth":9,"poc_exploit_code_gated":23,"source_links":31},"CVE-2026-40775","royal-mcp-secure-ai-connector-for-claude-chatgpt-gemini-missing-authorization","Royal MCP – Secure AI Connector for Claude, ChatGPT & Gemini \u003C= 1.4.2 - Missing Authorization","The Royal MCP – Secure AI Connector for Claude, ChatGPT & Gemini 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 unauthenticated attackers to perform an unauthorized action.","royal-mcp",null,"\u003C=1.4.2","1.4.3","medium",5.3,"CVSS:3.1\u002FAV:N\u002FAC:L\u002FPR:N\u002FUI:N\u002FS:U\u002FC:N\u002FI:L\u002FA:N","Missing Authorization","2026-04-21 00:00:00","2026-04-30 14:41:08",[19],"https:\u002F\u002Fwww.wordfence.com\u002Fthreat-intel\u002Fvulnerabilities\u002Fid\u002F61279ddc-92cc-4181-ba23-7de1464a9dec?source=api-prod",10,[],"researched",false,3,"This research plan targets CVE-2026-40775, a missing authorization vulnerability in the Royal MCP plugin (\u003C= 1.4.2). The vulnerability allows unauthenticated attackers to perform actions that should be restricted to administrators.\n\n### 1. Vulnerability Summary\nThe **Royal MCP** plugin fails to implement proper capability checks (authorization) on one or more of its AJAX or REST API endpoints. While it may use nonces for CSRF protection, the absence of `current_user_can()` in the handler functions, combined with the registration of these functions via `wp_ajax_nopriv_*` hooks, allows unauthenticated users to trigger the logic. Based on the CVSS vector (Integrity: Low), the vulnerability likely permits the modification of plugin settings or configuration.\n\n### 2. Attack Vector Analysis\n*   **Endpoint:** `wp-admin\u002Fadmin-ajax.php`\n*   **Action (Likely):** `rmcp_save_settings` or `royal_mcp_save_config` (to be verified in source).\n*   **Authentication:** None required (unauthenticated).\n*   **Preconditions:** The plugin must be active. A nonce may be required, but can be obtained from the frontend if the plugin localizes scripts for unauthenticated users (e.g., for a chat widget).\n\n### 3. Code Flow\n1.  **Registration:** The plugin registers an AJAX handler in its main class or an initialization file:\n    `add_action('wp_ajax_nopriv_[ACTION_NAME]', 'handle_action_function');`\n2.  **Entry Point:** An unauthenticated user sends a POST request to `admin-ajax.php` with `action=[ACTION_NAME]`.\n3.  **The Sink:** The `handle_action_function` is executed.\n    *   It may check a nonce using `check_ajax_referer` or `wp_verify_nonce`.\n    *   **The Flaw:** It skips `if (!current_user_can('manage_options')) { wp_die(); }`.\n    *   It proceeds to update database options using `update_option()` based on `$_POST` parameters.\n\n### 4. Nonce Acquisition Strategy\nIf the vulnerable function requires a nonce, we will extract it from the frontend.\n1.  **Identify Entry Point:** Search for `wp_localize_script` in the plugin code to find where nonces are exposed to the browser.\n2.  **Shortcode Discovery:** Search for `add_shortcode` to find the tag that renders the plugin's interface (e.g., `[royal_mcp_chat]`).\n3.  **Page Setup:** Create a public page containing this shortcode.\n    ```bash\n    wp post create --post_type=page --post_status=publish --post_title=\"AI Chat\" --post_content='[shortcode_found]'\n    ```\n4.  **Extraction:**\n    *   Navigate to the newly created page using `browser_navigate`.\n    *   Identify the global JS object. Based on common plugin patterns, look for `royal_mcp_data`, `rmcp_vars`, or `rmcp_params`.\n    *   Execute: `browser_eval(\"window.rmcp_vars?.nonce\")` (Replace with the actual variable and key found in source).\n\n### 5. Exploitation Strategy\n**Step 1: Discovery**\n*   Search for `wp_ajax_nopriv_` in the plugin directory: `grep -r \"wp_ajax_nopriv_\" .`\n*   Locate the handler function and check if it modifies options (e.g., calls `update_option`).\n*   Identify the parameter names for the settings.\n\n**Step 2: Craft Payload**\n*   **Target URL:** `http:\u002F\u002F[target]\u002Fwp-admin\u002Fadmin-ajax.php`\n*   **Method:** POST\n*   **Content-Type:** `application\u002Fx-www-form-urlencoded`\n*   **Parameters:**\n    *   `action`: `[action_found]`\n    *   `_ajax_nonce`: `[extracted_nonce]`\n    *   `setting_key`: `malicious_value` (e.g., changing the AI model to an expensive one or disabling security filters).\n\n**Step 3: Execute Request**\nUse the `http_request` tool to send the payload.\n\n### 6. Test Data Setup\n1.  Install and activate Royal MCP \u003C= 1.4.2.\n2.  Note the current value of a target setting (e.g., the API key or default model).\n    ```bash\n    wp option get royal_mcp_settings\n    ```\n3.  If a nonce is needed, identify the shortcode (e.g., `[royal_mcp_connector]`) and create a page to expose it as described in Section 4.\n\n### 7. Expected Results\n*   The server should return a successful status code (e.g., `200 OK` or a JSON success message `{\"success\":true}`).\n*   The targeted WordPress option (setting) should be updated in the database despite the request being unauthenticated.\n\n### 8. Verification Steps\nAfter the HTTP request, verify the change via WP-CLI:\n```bash\n# Check if the option was modified\nwp option get [OPTION_NAME_FOUND]\n```\nIf the option value matches the `malicious_value` sent in the POST request, the exploit is successful.\n\n### 9. Alternative Approaches\n*   **REST API:** If no AJAX actions are found, check `register_rest_route`. Look for routes where `'permission_callback'` is set to `__return_true` or is missing entirely, especially those handling `POST` or `PUT` requests.\n*   **Settings Reset:** Look for actions that reset settings to defaults. While \"Integrity: Low\", resetting an API configuration can still disrupt service.\n*   **Missing Nonce:** Check if `check_ajax_referer` is actually called. If it is omitted or called with `die=false` without checking the return value, the nonce acquisition step can be skipped.","The Royal MCP plugin for WordPress is vulnerable to unauthorized data modification in versions up to 1.4.2 due to missing capability checks on AJAX handlers. This allows unauthenticated attackers to execute administrative functions, such as changing plugin settings, by targeting endpoints registered with the wp_ajax_nopriv hook.","1. Identify the AJAX action registered via wp_ajax_nopriv in the plugin (likely associated with configuration or settings updates).\n2. Extract the necessary security nonce from the frontend by viewing a page where the plugin's scripts are localized (e.g., a page utilizing the plugin's AI chat shortcode).\n3. Send a POST request to \u002Fwp-admin\u002Fadmin-ajax.php with the action parameter, the extracted nonce, and the desired malicious setting values.\n4. Confirm the update by verifying the plugin's configuration via the WordPress dashboard or database.","gemini-3-flash-preview","2026-05-04 19:14:37","2026-05-04 19:15:00",{"type":32,"vulnerable_version":33,"fixed_version":9,"vulnerable_browse":34,"vulnerable_zip":35,"fixed_browse":9,"fixed_zip":9,"all_tags":36},"plugin","1.4.1","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Froyal-mcp\u002Ftags\u002F1.4.1","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Froyal-mcp.1.4.1.zip","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Froyal-mcp\u002Ftags"]