Scientific and Interactive Blocks – inseri core <= 1.0.5 - Missing Authorization
Description
The Scientific and Interactive Blocks – inseri core plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in versions up to, and including, 1.0.5. This makes it possible for unauthenticated attackers to perform an unauthorized action.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:NTechnical Details
<=1.0.5This research plan outlines the steps to identify and exploit the Missing Authorization vulnerability (CVE-2026-27344) in the **Scientific and Interactive Blocks – inseri core** plugin. --- ### 1. Vulnerability Summary The **Scientific and Interactive Blocks – inseri core** plugin (up to version 1…
Show full research plan
This research plan outlines the steps to identify and exploit the Missing Authorization vulnerability (CVE-2026-27344) in the Scientific and Interactive Blocks – inseri core plugin.
1. Vulnerability Summary
The Scientific and Interactive Blocks – inseri core plugin (up to version 1.0.5) fails to implement proper authorization checks (e.g., current_user_can()) on one or more of its AJAX or REST API handlers. Specifically, functions registered under wp_ajax_nopriv_* or REST routes with permissive permission_callback values allow unauthenticated attackers to perform actions intended for administrators or editors, such as creating, modifying, or deleting interactive blocks/items.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-ajax.php(AJAX) or/wp-json/inseri-core/v1/...(REST API). - Vulnerable Action (Inferred): Likely an action related to "saving" or "updating" block data. Based on the plugin structure, candidate actions include
inseri_core_save_item,inseri_core_create_item, or a REST route likePOST /wp-json/inseri-core/v1/items. - Payload Parameters:
item_id(int),content(string/JSON), and potentially anonce. - Preconditions: The plugin must be active. If a nonce is required, a page containing an
inseriblock must be accessible to extract the nonce.
3. Code Flow (Inferred)
- Entry Point: An unauthenticated user sends a POST request to
admin-ajax.phpwithaction=[ACTION_NAME]. - Hook Registration: The plugin registers the action:
add_action( 'wp_ajax_nopriv_[ACTION_NAME]', 'handle_unauthorized_action' );
(or fails to provide apermission_callbackin a REST route). - Vulnerable Function: The handler function
handle_unauthorized_actionexecutes. - Authorization Failure: The function lacks a
current_user_can('edit_posts')orcurrent_user_can('manage_options')check. - Sink: The function proceeds to call
wp_update_post(),update_post_meta(), or a direct$wpdbquery to modify site content.
4. Nonce Acquisition Strategy
If the handler uses check_ajax_referer or wp_verify_nonce, the nonce is likely localized for the frontend editor or interactive blocks.
- Identify Shortcode: Locate the primary shortcode (likely
[inseri-item]) or the block registration in the source. - Create Trigger Page: Use WP-CLI to create a page containing the block:
wp post create --post_type=page --post_status=publish --post_title="Exploit Page" --post_content='<!-- wp:inseri-core/item {"id":1} /-->' - Extract Nonce: Use
browser_navigateto visit the page andbrowser_evalto extract the localized nonce.- Candidate JS Variables:
window.inseri_core_vars?.nonceorwindow.inseri_core_data?.ajax_nonce. - Action String: Check the source for
wp_create_nonce('...')to identify the correct action key.
- Candidate JS Variables:
5. Exploitation Strategy
This plan assumes the vulnerability allows unauthorized modification of an "inseri item" (a custom post type or meta entry).
Step 1: Discovery
Search the plugin directory to find the specific vulnerable action:
grep -rn "wp_ajax_nopriv" .
grep -rn "register_rest_route" . -A 5
Identify handlers that perform write operations (update, delete, save).
Step 2: Nonce Extraction (If Required)
If a nonce is found in the discovery step (e.g., check_ajax_referer( 'inseri_core_nonce' ... )):
- Navigate to the page created in the "Test Data Setup".
- Execute:
browser_eval("window.inseri_core_vars.nonce").
Step 3: Execution of Unauthorized Action
Send a crafted HTTP request to modify a block's content:
- Method:
POST - URL:
http://localhost:8080/wp-admin/admin-ajax.php - Headers:
Content-Type: application/x-www-form-urlencoded - Body:
action=[DISCOVERED_ACTION]&nonce=[EXTRACTED_NONCE]&id=[TARGET_ID]&content=<h1>Vulnerable</h1><script>alert(1)</script>
6. Test Data Setup
- Activate Plugin:
wp plugin activate inseri-core. - Create Target Content: If the plugin uses a custom post type for items, create one:
wp post create --post_type=inseri_item --post_title="Target Block" --post_content="Original Scientific Data" --post_status=publish - Identify Target ID: Note the ID of the created post (e.g.,
123).
7. Expected Results
- Response: The server returns a
200 OKor a JSON success message (e.g.,{"success":true}). - Impact: The content of the "Scientific Block" (Post ID 123) is modified to include the attacker's payload (e.g., XSS or defacement).
8. Verification Steps
- Check Post Content: Use WP-CLI to verify the modification:
wp post get [TARGET_ID] --field=post_content - Verify UI Change: Navigate to the page where the block is embedded and check for the injected payload.
9. Alternative Approaches
- REST API Route: If an AJAX handler isn't found, check for REST routes at
POST /wp-json/inseri-core/v1/items. Test thepermission_callback. If it returns__return_trueor is missing, the route is publicly accessible. - Settings Modification: Check if the plugin registers
wp_ajax_nopriv_inseri_core_save_settings. If so, try to change plugin-wide configurations or inject malicious scripts into global headers/footers if the plugin provides such features.
Summary
The Scientific and Interactive Blocks – inseri core plugin for WordPress (up to version 1.0.5) fails to perform proper authorization checks in its AJAX or REST API handlers. This vulnerability allows unauthenticated attackers to perform sensitive actions, such as creating or modifying interactive blocks, by targeting functions registered without capability checks.
Exploit Outline
1. Locate a vulnerable AJAX action (e.g., associated with saving blocks) registered with 'wp_ajax_nopriv_*' or a REST API route (e.g., /wp-json/inseri-core/v1/items) lacking a strict 'permission_callback'. 2. If a security nonce is required, visit a page where an inseri block is active and extract the nonce from the localized JavaScript variables (e.g., window.inseri_core_vars.nonce). 3. Send a POST request to the WordPress AJAX or REST endpoint containing the identified action, the security nonce, the target block ID, and a malicious payload in the 'content' field. 4. Verify that the block's content has been unauthorizedly updated or that a malicious script (XSS) is now embedded within the block.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.