CVE-2024-12606
Executive Summary
CVE-2024-12606 is a Missing Authorization vulnerability in the AI Scribe – SEO AI Writer WordPress plugin (versions up to and including 2.5). This flaw allows authenticated attackers with Subscriber-level access or higher to modify plugin settings without proper capability checks. The vulnerability resides in the engine_request_data() function, which lacks a current_user_can() check, enabling unauthorized data modification. This is a WordPress ecosystem issue, not related to Apache or Nginx.
The vulnerability has a CVSS score of 4.3 (Medium) and an EPSS score of 0.0%, indicating low exploitation likelihood currently. However, given the plugin's popularity for AI content generation, the risk of targeted attacks remains. No public exploit code or proof-of-concept is available at this time.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This is a WordPress plugin vulnerability. The plugin is distributed via the WordPress Plugin Directory and directly installed on WordPress sites. No NPM, PyPI, Go, or Ruby packages are involved. The supply chain risk is limited to the plugin's update mechanism and the trustworthiness of the vendor (AI Scribe). Since the patch status is UNKNOWN, users should consider disabling the plugin until a fix is released.
CVSS Breakdown & Threat Level
- CVSS Score: 4.3 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: Low (PR:L) – Subscriber-level
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: None (C:N)
- Integrity Impact: Low (I:L) – unauthorized modification of plugin settings
- Availability Impact: None (A:N)
Threat Level: Medium. The vulnerability requires authentication but only at the Subscriber level, which is easily obtainable on many WordPress sites. The impact is limited to plugin settings modification, which could lead to further exploitation (e.g., changing API keys, disabling security features).
Deep Dive & Mechanics
The vulnerability is a classic Missing Authorization (CWE-862) in the engine_request_data() function of the AI Scribe plugin. This function is intended to handle AJAX requests for plugin settings updates. However, it fails to verify that the requesting user has the necessary capabilities (e.g., manage_options) before processing the request.
Root Cause:
- The
engine_request_data()function is registered viawp_ajax_hooks but lacks acurrent_user_can()orwp_verify_nonce()check. - This allows any authenticated user (Subscriber and above) to send crafted AJAX requests to modify plugin settings.
Attack Flow:
- Attacker registers as a Subscriber on the target WordPress site.
- Attacker crafts an AJAX request to the
engine_request_dataaction with malicious parameters. - The plugin processes the request and updates settings (e.g., API endpoints, content generation parameters).
- Attacker can potentially redirect AI content generation to malicious servers or disable security features.
Impact:
- Unauthorized modification of plugin settings.
- Potential for further exploitation if settings control API keys or content generation behavior.
- No direct data exfiltration, but integrity of the plugin's operation is compromised.
Vulnerable vs. Patched Code
Since no patch is available, the vulnerable code is identified as the engine_request_data() function in the plugin's main file (likely ai-scribe.php or similar). The function likely looks like:
// Vulnerable code (<= 2.5)
add_action('wp_ajax_engine_request_data', 'engine_request_data');
function engine_request_data() {
// No capability check
$settings = $_POST['settings'];
update_option('ai_scribe_settings', $settings);
wp_die();
}
A patched version would include a capability check:
// Patched code (hypothetical)
add_action('wp_ajax_engine_request_data', 'engine_request_data');
function engine_request_data() {
if (!current_user_can('manage_options')) {
wp_die('Unauthorized', 403);
}
if (!wp_verify_nonce($_POST['_wpnonce'], 'ai_scribe_nonce')) {
wp_die('Invalid nonce', 403);
}
$settings = $_POST['settings'];
update_option('ai_scribe_settings', $settings);
wp_die();
}
Exploitation & Lab Setup
Red Team (Exploitation)
Prerequisites:
- Target WordPress site with AI Scribe plugin <= 2.5.
- Valid Subscriber account credentials.
Exploitation Steps:
- Log in as a Subscriber.
- Obtain the AJAX nonce (if any) from the page source or by inspecting network requests.
- Send a crafted POST request to
/wp-admin/admin-ajax.php:
curl -X POST https://target.com/wp-admin/admin-ajax.php \
-d "action=engine_request_data&settings[api_endpoint]=https://attacker.com/malicious&_wpnonce=VALID_NONCE" \
--cookie "wordpress_logged_in_xxx=..."
- Verify the settings change by checking the plugin's configuration page or by sending another request.
Note: No public exploit code is available. The above is a conceptual example.
Blue Team (Detection & Defense)
Detection:
- Monitor AJAX requests to
admin-ajax.phpwithaction=engine_request_datafrom non-admin users. - Look for unusual changes to plugin settings (e.g., API endpoints pointing to external IPs).
- Use the detection rules provided below.
Defense:
- Immediately disable the AI Scribe plugin if no patch is available.
- Restrict Subscriber accounts to only trusted users.
- Implement Web Application Firewall (WAF) rules to block unauthorized AJAX requests.
- Monitor for privilege escalation attempts.
Indicators of Compromise (IOCs)
- Network IOCs:
- POST requests to
/wp-admin/admin-ajax.phpwithaction=engine_request_datafrom low-privilege users. - Unusual API endpoints in plugin settings (e.g.,
https://attacker.com/).
- POST requests to
- File IOCs:
- Modified
wp_optionstable entries forai_scribe_settings.
- Modified
- Log IOCs:
- WordPress debug logs showing
engine_request_datacalls without proper nonce or capability checks.
- WordPress debug logs showing
Detection Engineering
YARA Rule
rule CVE_2024_12606_AI_Scribe_Missing_Auth {
meta:
description = "Detects vulnerable AI Scribe plugin files with missing capability check"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2024-12606"
strings:
$func = "engine_request_data" ascii wide nocase
$ajax = "wp_ajax_engine_request_data" ascii wide nocase
$missing_check = "current_user_can" ascii wide nocase
condition:
$func and $ajax and not $missing_check
}
Sigma Rule
title: CVE-2024-12606 - AI Scribe Plugin Settings Modification
id: 8a3f7c2e-5d1b-4a9f-8c6e-2b3a1d4f7e8c
status: experimental
description: Detects unauthorized modification of AI Scribe plugin settings via missing capability check
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: wordpress
detection:
selection:
cs-method: 'POST'
cs-uri-stem: '/wp-admin/admin-ajax.php'
cs-uri-query|contains: 'action=engine_request_data'
condition: selection
falsepositives:
- Legitimate admin actions (if patched)
level: medium
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2024-12606 - AI Scribe Plugin Settings Modification Attempt";
flow:to_server,established;
content:"POST"; http_method;
content:"/wp-admin/admin-ajax.php"; http_uri;
content:"action=engine_request_data"; http_client_body;
classtype:attempted-admin;
sid:1000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Disable the AI Scribe plugin until a patched version is released.
- Review and revoke any suspicious Subscriber accounts.
- Check plugin settings for unauthorized changes (e.g., API endpoints, content generation parameters).
Long-term Fix:
- Apply the vendor patch when available (currently UNKNOWN).
- Implement a Web Application Firewall (WAF) rule to block
engine_request_dataAJAX actions from non-admin users. - Regularly audit WordPress user roles and capabilities.
Workaround:
- Add a custom capability check via a mu-plugin:
add_action('wp_ajax_engine_request_data', 'custom_engine_request_data_check', 1);
function custom_engine_request_data_check() {
if (!current_user_can('manage_options')) {
wp_die('Unauthorized', 403);
}
}
Valters IT
Securing Digital Frontiers
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.