King Addons for Elementor <= 51.1.49 - Unauthenticated API Keys Disclosure
Description
The King Addons for Elementor – 4,000+ ready Elementor sections, 650+ templates, 70+ FREE widgets for Elementor plugin for WordPress is vulnerable to unauthenticated API key disclosure in all versions up to, and including, 51.1.49 due to the plugin adding the API keys to the HTML source code via render_full_form function. This makes it possible for unauthenticated attackers to extract site's Mailchimp, Facebook and Google API keys and secrets. This vulnerability requires the Premium license to be installed
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:NTechnical Details
<=51.1.49What Changed in the Fix
Changes introduced in v51.1.51
Source Code
WordPress.org SVN# Exploitation Research Plan: CVE-2025-13997 - King Addons for Elementor Unauthenticated API Key Disclosure ## 1. Vulnerability Summary The **King Addons for Elementor** plugin (up to version 51.1.49) contains an information disclosure vulnerability where sensitive API keys and secrets (Mailchimp, …
Show full research plan
Exploitation Research Plan: CVE-2025-13997 - King Addons for Elementor Unauthenticated API Key Disclosure
1. Vulnerability Summary
The King Addons for Elementor plugin (up to version 51.1.49) contains an information disclosure vulnerability where sensitive API keys and secrets (Mailchimp, Facebook, Google) are leaked to the public HTML source code. This occurs because the plugin's render_full_form function (likely associated with form-based widgets like Mailchimp or Social Login) outputs these configuration values directly into the frontend markup without checking the visitor's authentication or authorization level. This vulnerability specifically affects sites where the Premium license features are active.
2. Attack Vector Analysis
- Endpoint: Any public-facing WordPress page or post where a vulnerable King Addons widget (e.g., Mailchimp, Login, or Social Login) is rendered.
- Vulnerable Function:
render_full_form(inferred to be within a Pro/Premium widget class or form helper). - Authentication: None (Unauthenticated).
- Preconditions:
- The Premium version of the plugin must be active.
- API keys (Mailchimp, Facebook, or Google) must be configured in the plugin settings.
- A widget utilizing the
render_full_formfunction must be placed on a public page.
3. Code Flow
- Initialization: The plugin loads widgets and extensions via
King_Addons\Core::instance(). - Request: An unauthenticated visitor requests a page containing an Elementor widget from King Addons.
- Rendering: Elementor calls the
render()method of the widget. - Vulnerable Call: The widget's
render()method invokesrender_full_form(). - Information Retrieval: Inside
render_full_form(), the code retrieves the plugin's global options:$options = get_option('king_addons_options', []);
- Disclosure: The function constructs HTML (e.g., hidden inputs or JS config objects) containing keys like
mailchimp_api_key,facebook_app_secret, orgoogle_client_secretand echoes them directly to the page buffer.
4. Nonce Acquisition Strategy
This vulnerability does not require a WordPress nonce because it is a passive information disclosure via a GET request to a public page. The disclosure happens during the standard rendering of the page content.
5. Exploitation Strategy
Step 1: Preparation (Simulate Premium and Configure Keys)
The vulnerability requires "Premium" features. We will mock the premium state and populate the king_addons_options with dummy secrets.
Step 2: Identify and Place Vulnerable Widget
The vulnerability description identifies render_full_form as the sink. We will search for this function in the plugin directory to identify the specific widget. Based on the leaked keys (Mailchimp/Facebook), the "Mailchimp" or "Social Login" widgets are the primary suspects.
Step 3: Trigger Disclosure
- Create a public page.
- Add the identified widget to the page.
- Perform an unauthenticated
GETrequest to the page. - Parse the HTML to find the secrets.
6. Test Data Setup
- Inject Dummy API Keys:
wp option update king_addons_options '{"mailchimp_api_key":"MOCK_MAILCHIMP_KEY_12345","facebook_app_secret":"MOCK_FB_SECRET_67890","google_client_secret":"MOCK_GOOGLE_SECRET_ABCDE"}' --format=json - Find the Widget:
Search for the vulnerable function:grep -r "render_full_form" /var/www/html/wp-content/plugins/king-addons/ - Create a Target Page:
Assuming the widget uses a shortcode or can be identified by its PHP class (e.g.,Mailchimp), create a page. Since we are in a PoC environment, we will use a shortcode if available, or manually trigger the widget's render.- Note: If the specific widget shortcode is unknown, we will look for
add_shortcodein the plugin source or use a generic Elementor library template.
- Note: If the specific widget shortcode is unknown, we will look for
7. Expected Results
A successful exploit will return the HTML content of the page where the dummy keys are visible in the source.
Example Expected HTML Snippet:
<div class="king-addons-form-wrapper">
<input type="hidden" name="mailchimp_api" value="MOCK_MAILCHIMP_KEY_12345">
<!-- OR -->
<script>
var ka_form_config = {"mailchimp_key":"MOCK_MAILCHIMP_KEY_12345", ...};
</script>
</div>
8. Verification Steps
- HTTP Request (Unauthenticated):
# Use the http_request tool to fetch the public page # Look for the "MOCK_MAILCHIMP_KEY_12345" string in the response body. - Manual Source Check:
Navigate to the page usingbrowser_navigateand usebrowser_eval("document.body.innerHTML")to search for the secrets.
9. Alternative Approaches
If a specific widget cannot be easily placed on a page via CLI:
- Direct Function Call: If
is_admin()is not checked insiderender_full_form, we can usewp evalto call the function and confirm it outputs the keys, though the CVSS requires unauthenticated web access. - Shortcode Bruteforce: King Addons typically uses widget slugs as shortcodes. Try
[king_mailchimp],[king_addons_mailchimp], or check theModulesMap.phpforphp-classnames to infer the widget's identity. - Template Injection: If the plugin allows importing templates (common in Addon packs), import a template that uses the vulnerable widget.
Summary
The King Addons for Elementor plugin (Premium version) is vulnerable to unauthenticated information disclosure because it renders sensitive API keys and secrets for services like Mailchimp, Facebook, and Google directly into the HTML source code of public pages. This occurs within the 'render_full_form' function used by certain widgets, which fails to restrict the output of configuration settings to authorized users.
Security Fix
@@ -674,6 +674,21 @@ flex-grow: 1; } +.ka-v3-card-requirement { + margin: 12px 0 0; + font-size: 13px; + line-height: 1.4; + color: #8e8e93; + background: linear-gradient(135deg, #2c2c2e 0%, #3a3a3c 100%); + padding: 3px 5px; + border-radius: 6px; +} + +.ka-v3-card.ka-v3-card-unavailable .ka-v3-toggle { + pointer-events: none; + opacity: 0.6; +} + .ka-v3-card-footer { margin-top: 20px; padding-top: 16px; @@ -719,7 +734,7 @@ } .ka-v3-toggle input { - opacity: 0; + opacity: 0 !important; width: 0; height: 0; } ... (truncated)
Exploit Outline
An attacker can exploit this vulnerability by identifying a public-facing page on a WordPress site that uses a Premium King Addons widget, such as the Mailchimp signup form or Social Login widget. By making an unauthenticated GET request to the page, the attacker can inspect the HTML source code for sensitive information. The plugin's 'render_full_form' function retrieves the site's global 'king_addons_options' and incorrectly embeds secrets (like Mailchimp API keys, Facebook App Secrets, or Google Client Secrets) directly into the page markup as hidden inputs or JavaScript configuration objects.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.