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-11551-PoC — Exploit de prueba de concepto para CVE-2026-11551, una vulnerabilidad de escalada de privilegios no autenticada en el plugin Branda White Label para WordPress, que permite la toma de control de cuentas mediante doble hash de contraseñas. | Kitploit
Herramientas/GitHubGitHub/ubaydev/cve-2026-11551-poc
Escalada de PrivilegiosAnálisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónAutenticación

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
GitHub
ubaydev/cve-2026-11551-poc

CVE-2026-11551-PoC

Exploit de prueba de concepto para CVE-2026-11551, una vulnerabilidad de escalada de privilegios no autenticada en el plugin Branda White Label para WordPress, que permite la toma de control de cuentas mediante doble hash de contraseñas.

Ver Repositorio
122hace 4 mesesAún no revisado

CVE-2026-11551 - Privilegio no autenticado en White Label & Branding, Free Login Page Customizer

White Label & Branding, Free Login Page Customizer <= 3.4.29 - Escalada de privilegios no autenticada mediante toma de cuenta

Flujo completo de WordPress Core → Filtro Branda:

wp_update_user( $userdata )
    │
    ├── wp_hash_password( $userdata['user_pass'] )   ← Line 2709: SUDAH DI-HASH
    │
    └── wp_insert_user( $userdata )
            │
            ├── $user_pass = $userdata['user_pass']  ← Line 2228: HASHED
            │
            ├── $data = compact('user_pass', ...)    ← Line 2469: HASHED
            │
            ├── apply_filters('wp_pre_inserter_id)
            │       │
            │       └── Branda: pre_insert_u
            │               │
            │               ├── query wp_sig['user_login']
            │               ├── if meta['pas
            │               │   $data['user_ta['password'])
            │               │                                        ↑
            │                           ┌───
            │                           │
            │                           ↓
            │               DOUBLE HASH: wp_d($raw))
            │
            └── $wpdb->update( $wpdb->users, $data, ... )  ← Line 2515: DOUBLE HASH TERSIMPAN

Código vulnerable (inc/modules/login-screen/signup-password.php:230-251)

/**
 * BRANDA - signup-password.php
 * Filter: wp_pre_insert_user_data
 */
public function pre_insert_user_data( $data,
    // ❌ TIDAK ADA CEK: if ($update) return
    // ❌ Filter ini JALAN untuk INSERT DAN

    if ( is_multisite() ) {
        global $wpdb;

        // ❌ $data['user_login'] dari POST n edit user
        $query = $wpdb->prepare(
            "SELECT meta FROM {$wpdb->signup
            $data['user_login']  // ← bisa diubah attacker
        );
        $result = $wpdb->get_var( $query );
        $meta   = maybe_unserialize( $result

        if ( is_array( $meta ) && isset( $me
            // ❌ DOUBLE HASH: WordPress SUDAH hash sebelum filter ini jalan
            // $meta['password'] = "mysecret
            // wp_hash_password("mysecretpasama dari WP core)
            // wp_hash_password("$P$Bxyz..."dari Branda)
            $data['user_pass'] = wp_hash_pas

            unset( $meta['password'] );
            $wpdb->update(
                $wpdb->signups,
                array( 'meta' => maybe_seria
                array( 'user_login' => $data
            );
        }
        return $data;
    }
    // ...
}

Código de WordPress Core que causa la vulnerabilidad:

  1. wp_update_user() — Línea 2706-2709
// wp-includes/user.php:2706
if ( ! empty( $userdata['user_pass'] ) && $u_user_data->user_pass ) {
    $plaintext_pass        = $userdata['user
    $userdata['user_pass'] = wp_hash_passwor // ← HASH #1
}
  1. wp_insert_user() — Línea 2228
// wp-includes/user.php:2228 (UPDATE path)
$user_pass = ! empty( $userdata['user_pass'] $old_user_data->user_pass;
// $user_pass sekarang = "$P$Bxyz...SUDAH HASH"
  1. wp_insert_user() — Línea 2505
// wp-includes/user.php:2505
$data = apply_filters( 'wp_pre_insert_user_dd, $userdata );
// Branda filter jalan, $data['user_pass'] SUDAH HASH dari line 2228

Escenario de ataque: toma de cuenta vía administrador

Configuración

  1. WordPress multisitio con Branda Signup
  2. Hay un registro pendiente en wp_signups:
   ┌─────────────┬──────────────────────────┐
   │ user_login   │ meta (serialized)       │
   ├─────────────┼──────────────────────────│
   │ victim_user  │ a:1:{s:8:"password";s:10:"H4cker123!"}│
   └─────────────┴──────────────────────────┴
  1. Objetivo: Usuario "admin_user" (ID=2) con rol Administrador

Flujo de explotación

PASO 1: El atacante inicia sesión en WP-Admin (puede ser vía web o un exploit CSRF para activar una acción de administrador)

PASO 2: El atacante abre /wp-admin/user-edit.php (para editar a admin_user)

PASO 3: El atacante cambia el user_login de admin_user a "victim_user"

        ┌────────────────────────────────────────────┐
        │ Field: username                            │
        │ Value: victim_user  ← DIUBAH               │
        └────────────────────────────────────────────┴

PASO 4: El formulario se envía → se llama a wp_update_user()

PASO 5: Flujo de WordPress Core:

        wp_update_user({ID: 2, user_login: "victim_user", ...})
            │
            ├── user_pass = wp_hash_password(old_password)  ← HASH #1
            │
            └── wp_insert_user({ID: 2, user_login: "victim_user", user_pass: "$P$Bhash1"})
                    │
                    └── apply_filters('wp_pre_insert_user_data', $data, true, 2)
                            │
                            └── Branda: pre_insert_user_data()
                                    │
                                    ├── $data['user_login'] = "victim_user"
                                    │
                                    ├── SELECT meta FROM wp_signups WHERE user_login = "victim_user"
                                    │   → meta = 'a:1:{s:8:"password";s:10:"H4cker123!"}'
                                    │
                                    ├── $meta['password'] = "H4cker123!"
                                    │
                                    └── $datword("H4cker123!")
                                             ← HASH #2 (DOUBLE!)

PASO 6: Tabla wp_users actualizada:

    ┌────┬────────────┬──────────────────────────────────┐
    │ ID │ user_login │ user_pass                        │
    ├────┼────────────┼──────────────────────────────────┼
    │ 2  │ victim_user│ $P$Bhash2  ← DOUBLE HASH!        │
    └────┴────────────┴──────────────────────────────────┴

PASO 7: admin_user ahora:

  • Nombre de usuario: victim_user
  • Contraseña: H4cker123! pero con doble HASH
  • ¡El inicio de sesión falla! → Bloqueo de cuenta

PASO 8: Mientras tanto, el atacante puede:

  • Iniciar sesión con las credenciales de registro si el meta aún no se ha limpiado
  • O registrarse de nuevo con el mismo user_login

Referencias:

  • https://plugins.trac.wordpress.org/browser/branda-white-labeling/trunk/inc/modules/login-screen/signup-password.php?rev=3429115#L232
  • https://plugins.trac.wordpress.org/browser/branda-white-labeling/tags/3.4.29/inc/modules/login-screen/signup-password.php#L232
  • https://www.wordfence.com/threat-intel/vulnerabilities/wordpress-plugins/branda-white-labeling/branda-white-label-branding-free-login-page-customizer-3429-unauthenticated-privilege-escalation-via-account-takeover
Descargar herramienta