Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-8206 — CVE-2026-8206: Kirki Customizer Framework - Toma de control de cuenta no autenticada (CVSS 9.8) | Kitploit
Herramientas/GitHubGitHub/dungsocool/cve-2026-8206
Ataques de ContraseñasAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAutenticaciónPapers e InvestigaciónAprendizaje y EducaciónDesarrollo de Payloads
GitHubdungsocool/cve-2026-8206

CVE-2026-8206

CVE-2026-8206: Kirki Customizer Framework - Toma de control de cuenta no autenticada (CVSS 9.8)

118hace 2 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

CVE-2026-8206

Vulnerabilidad: Toma de control de cuenta no autenticada — Secuestro del correo de restablecimiento de contraseña en Kirki Customizer Framework

CVSS v3.1 9.8 / 10.0 CRÍTICA

Vector: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H


1. Resumen

CVE-2026-8206 es una vulnerabilidad de Toma de control de cuenta no autenticada en Kirki Customizer Framework, un popular plugin de constructor de páginas para WordPress con más de 90.000 instalaciones activas. La vulnerabilidad permite a un atacante tomar el control de cualquier cuenta de WordPress (incluida la de administrador) simplemente enviando una única petición HTTP.

El fallo reside en el endpoint de la API REST kirki-forgot-password del módulo ComponentLibrary. Este endpoint permite solicitar el restablecimiento de contraseña de cualquier usuario y envía el enlace de restablecimiento a una dirección de correo electrónico especificada por el atacante, en lugar de al correo registrado del usuario.

InformaciónDetalles
PluginKirki Customizer Framework (constructor de páginas WordPress)
Versiones afectadas6.0.0 – 6.0.6
Parcheada6.0.7 (o 6.0.12+)
Tipo de vulnerabilidadToma de control de cuenta no autenticada mediante secuestro del correo de restablecimiento de contraseña
Endpoint/index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password (o /wp-json/KirkiComponentLibrary/v1/kirki-forgot-password)
CVSS9.8 CRÍTICA

Requisitos previos para la explotación:

  • Kirki Customizer Framework 6.0.0–6.0.6 está activado
  • La API REST es pública (configuración predeterminada de WordPress)
  • El módulo ComponentLibrary está activo (activado por defecto cuando el plugin está activo)
  • No se requiere cuenta ni sesión

→ Todo sitio WordPress con Kirki 6.0.0–6.0.6 instalado es vulnerable por defecto.

2. Terminología

Endpoints REST de ComponentLibrary

Kirki registra endpoints de la API REST para la funcionalidad Component Library, incluyendo login, register, forgot-password y change-password. Todos ellos permiten el acceso de invitados (guest_permissions_check devuelve true).

Validación de nonce

El nonce de WordPress es un token de protección CSRF. Kirki requiere un nonce mediante la cabecera X-WP-Element-Nonce o comprueba un parámetro nonce en la petición. Sin embargo, el nonce puede generarse/extraerse públicamente desde el lado del cliente.

Clave de restablecimiento de contraseña

WordPress utiliza get_password_reset_key() para generar un token de restablecimiento de contraseña. Kirki incluye este token en la plantilla del correo antes de enviarlo.

3. Causa raíz — Secuestro del correo de restablecimiento de contraseña

Archivo: ComponentLibrary/controller/CompLibFormHandler.php

Bug 1: Falta de validación entre el correo y el usuario

En la versión vulnerable (6.0.0–6.0.6), la función handle_forgot_password() no verifica si el correo proporcionado coincide con el correo registrado del usuario. Un atacante puede especificar el nombre de usuario de la víctima y su propio correo: el enlace de restablecimiento se enviará al correo del atacante.

Código fuente vulnerable:

public function handle_forgot_password( $request ) {
    $form_data = $request->get_body_params();
    $this->validate_nonce( 'kirki-forgot-password' );

    $email    = $form_data['email'];     // <-- ATTACKER CONTROLLED
    $username = $form_data['username'];

    $user = get_user_by( 'login', $username );
    //BUG: Does NOT check $email === $user->user_email
    //      Attacker's email is used directly

    $key = get_password_reset_key( $user );
    $reset_link = "$url?action=rp&key=$key&login=$username";

    // SENDS RESET LINK TO ATTACKER'S EMAIL
    wp_mail( $email, $subject, $body_with_reset_link );
    //       ^^^^^
    //  ATTACKER'S EMAIL, NOT THE USER'S EMAIL
}

Bug 2: Falta de firma HMAC en la plantilla del correo

El asunto y el cuerpo del correo se reciben del cliente a través de los parámetros emailSubject y emailBody sin ninguna firma HMAC que verifique su integridad. El atacante puede modificar arbitrariamente el contenido del correo que se envía.

// VULNERABLE VERSION: No HMAC verification
$email_subject = $form_data['emailSubject'];   // Client-controlled
$email_body    = $form_data['emailBody'];       // Client-controlled
// No verify_email_template_signature()

// PATCHED VERSION (6.0.7+): HMAC verification / Email matching against DB
$user_email = $user->get( 'user_email' );
if ( $email !== $user_email ) {
    return new WP_REST_Response( array( 'message' => 'If an account exists...' ), 200 );
}

4. Por qué esta vulnerabilidad es peligrosa

FactorExplicación
No se requiere autenticaciónguest_permissions_check() devuelve true: cualquiera puede llamar al endpoint
Se puede tomar el control de cualquier cuentaSolo se necesita el nombre de usuario (por defecto: 'admin') — no se requiere correo ni contraseña
Impacto: toma de control del administradorControlar al administrador → subir webshell → RCE → control total del servidor
Amplia distribuciónKirki es un plugin ampliamente integrado en muchos temas de WordPress

5. Análisis de la cadena de ataque

La explotación de CVE-2026-8206 comienza desde cero acceso — sin cuenta, sin contraseña, sin sesión — hasta la toma de control total del administrador utilizando únicamente peticiones HTTP.

Phase 1: Extract Nonce       → Obtain nonce from a public page (if required)
Phase 2: Hijack Reset Email  → Send reset link to attacker's email
Phase 3: Reset Password      → Change admin password using the obtained reset key
Phase 4: Login Admin         → Log in with the new password
Phase 5: Webshell Upload     → Install backdoor via plugin upload
Phase 6: RCE                 → Execute arbitrary commands on the server

5.0 Metodología de construcción del payload

Paso 1: Lectura del código fuente (el método más preciso)

Descarga el plugin desde wordpress.org y abre directamente el archivo CompLibFormHandler.php:

// The handle_forgot_password function receives data from the client:
$email_subject = isset( $form_data['emailSubject'] )
                 ? sanitize_text_field( $form_data['emailSubject'] ) : '';
$email_body = isset( $form_data['emailBody'] )
              ? json_decode( $form_data['emailBody'], true ) : '';
// Email body rendering logic:
foreach ( $email_body as $body_data ) {
    if ( $body_data['type'] === 'text' ) {
        $email_body = $email_body . $body_data['value'];
    } elseif ( $body_data['type'] === 'chip' ) {
        $email_body = $email_body . $chip_data[ $body_data['value'] ];
        //                                     ^^^^^^^^^^^^^^^^^^^
        //                $chip_data['reset_link'] = actual reset URL!
    }
}

→ La lectura del código revela: emailBody debe ser un array JSON; cada elemento tiene type y value. Si type = chip y value = reset_link, Kirki inserta automáticamente el enlace de restablecimiento en el correo.

Paso 2: Buscar en el bundle JavaScript del plugin

Busca directamente dentro del directorio del plugin:

grep -r "emailBody" wp-content/plugins/kirki/assets/js/
grep -r "reset_link" wp-content/plugins/kirki/assets/js/

El código frontend compilado revelará la estructura JSON exacta requerida.

Resumen del proceso de descubrimiento del payload:

Find endpoint (/wp-json/ or rest_route)
       ↓
Read PHP source → find $form_data['emailBody']
       ↓
Understand JSON array format (type / value)
       ↓
Read chip_data array → find key "reset_link"
       ↓
Build payload: emailBody=[{"type":"chip","value":"reset_link"}]
       ↓
Test → success

5.1 Fase 1: Secuestro del correo de restablecimiento de contraseña

Descargar herramienta