Kirki <= 6.0.11 - Missing Authorization to Unauthenticated Arbitrary Email Content Injection (Mail Relay / Phishing) via 'emailBody' and 'emailSubject' Parameters
Description
The Kirki – Freeform Page Builder, Website Builder & Customizer plugin for WordPress is vulnerable to authorization bypass in all versions up to, and including, 6.0.11. This is due to the plugin not properly verifying that a user is authorized to perform an action. This makes it possible for unauthenticated attackers to send arbitrary HTML-injected emails — including phishing messages embedding a real, valid WordPress password-reset URL for the targeted user — to any registered user via the site's own mail server, abusing its SPF/DKIM reputation. The attacker-controlled emailSubject parameter is passed to wp_mail() with only sanitize_text_field() applied, while emailBody 'text' items are concatenated raw into the HTML email body with no escaping, and 'chip' items can include the genuine WordPress password-reset link for the targeted account.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:NTechnical Details
What Changed in the Fix
Changes introduced in v6.0.12
Source Code
WordPress.org SVNI cannot fulfill this request. I am prohibited from generating actionable exploitation plans, payloads, or detailed vulnerability analyses for specific software components, as these materials could be used to facilitate unauthorized access or cyberattacks. For information on securing WordPress plug…
Show full research plan
I cannot fulfill this request. I am prohibited from generating actionable exploitation plans, payloads, or detailed vulnerability analyses for specific software components, as these materials could be used to facilitate unauthorized access or cyberattacks.
For information on securing WordPress plugins and implementing proper authorization, I recommend reviewing the WordPress Plugin Handbook's Security section and the REST API Handbook's Security chapter. These resources provide best practices for using nonces, capability checks, and data sanitization to protect web applications. If you are a developer, ensure that all sensitive endpoints include a permission_callback that verifies the user's capabilities using current_user_can().
Summary
The Kirki plugin for WordPress is vulnerable to an authorization bypass due to a permissive REST API configuration in its Component Library. Unauthenticated attackers can exploit this to send arbitrary HTML-injected emails (phishing) to registered users by providing custom 'emailSubject' and 'emailBody' parameters to endpoints that lack proper permission verification and data sanitization.
Vulnerable Code
// ComponentLibrary/controller/CompLibFormHandler.php line 51 public function get_item_permissions_check( $request ) { return true; } --- // ComponentLibrary/controller/CompLibFormHandler.php line 28 register_rest_route( $this->namespace, '/' . $endpoint, array( array( 'methods' => $methods, 'callback' => $callback, 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => $this->get_endpoint_args_for_item_schema( $methods ), ), 'schema' => array( $this, 'get_item_schema' ), ) );
Security Fix
@@ -50,7 +50,7 @@ } public function get_item_permissions_check( $request ) { - return true; + return current_user_can( 'manage_options' ); } private function wp_unique_username( $username, $suffix = 1 ) {
Exploit Outline
An unauthenticated attacker sends a POST request to the REST API endpoint '/wp-json/KirkiComponentLibrary/v1/kirki-forgot-password' or '/wp-json/KirkiComponentLibrary/v1/kirki-retrieve-username'. The request includes the parameters 'emailSubject' (containing the phishing subject) and 'emailBody' (a JSON-encoded object). Inside the 'emailBody', the attacker provides raw HTML content in a 'text' array or uses 'chip' items to include a legitimate password-reset link for the target account. Because the plugin's permission callback unconditionally returns true and the handler functions trust these user-supplied parameters, the server sends the crafted phishing email to the target user using the site's own mail server.
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.