
Prueba de concepto de exploit para CVE-2026-12793, una escalada de privilegios no autenticada en WordPress JetFormBuilder hasta la versión 3.6.2 que crea cuentas de administrador.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-12793
JetFormBuilder 3.6.2 - jetmonsters
Soy @abraxas_null. Laboratorio de loopback. El cliente es CVE-2026-12793-Abraxas-Labs.py.
El aviso nombraba un campo. _jet_engine_booking_form_id es un campo POST, no HTTP action=. set_form_id solo hace absint(). get_blocks_by_post analiza cualquier post. Un post normal con los bloques correctos y _jf_actions register-user administrator es suficiente. El hook del router en vivo no es el predeterminado de origen jet_form_builder_submit=submit. Parcheado en 3.6.2.1.
| CVE | CVE-2026-12793 · CVE.org |
| CWE | CWE-269 |
| CVSS | Crítico: 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Producto | JetFormBuilder - Dynamic Blocks Form Builder |
| Afectado | todas las versiones hasta la 3.6.2 (inclusive) |
| Parcheado | 3.6.2.1 y posteriores |
| Autenticación | ninguna |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1 |
POST no autenticado a / con el par de hooks en vivo, ese id de post, y login/email/password. JSON status: success más un user_id numérico. Ese usuario es administrador. Crear el usuario es la prueba.
Wordfence nombraba _jet_engine_booking_form_id. Leí set_form_id, luego get_blocks_by_post, luego el manejador de la acción. La tabla de opciones reescribe el par del router en la primera carga.
Descubre el par como un visitante: haz un GET del documento REST público del post portador. POST a / con method=ajax, el par de hooks en vivo, y el id del formulario. JSON pequeño, decenas de bytes. Si sigues leyendo un DOCTYPE, sigues perdido.
Caminos equivocados: jet_form_builder_submit=submit devuelve ~80k de HTML del tema; REST /jet-form-builder/v1/validate-field es la puerta equivocada en 3.6.2; pelearse con el nonce (load_nonce=hide, use_csrf=false en el fixture); un subscriber porque el user_role de _jf_actions no era administrator (fallo de seed, no un parche); enviar un id real de CPT jet-form-builder (el producto funcionando).
Puerto 8088. JetFormBuilder 3.6.2. Slug del post portador jfb-lab-carrier (post, no jet-form-builder) con el par de hooks impreso en REST.
Objetivo solo 127.0.0.1:8088 (o el loopback que hayas enlazado).
cd lab
docker compose up --force-recreate
python3 ../CVE-2026-12793-Abraxas-Labs.py
Testigo: JSON {"user_id":N,"status":"success"} y /wp/v2/users/<id> es administrator. El HTML del tema no lo es.
Formas de perder sin aprender nada:
/ 200, ~80k HTML, hook predeterminadoActualiza JetFormBuilder a 3.6.2.1 o posterior. Vuelve a ejecutar CVE-2026-12793-Abraxas-Labs.py contra la compilación parcheada: el user_id de administrator no debe aparecer.
www.wordfence.com/threat-intel/vulnerabilities/id/a61b2ecc-d4e1-4e71-9187-ddc3d3616a29?source=cve
Directorio de plugins: jetformbuilder
Navegador Trac: plugins.trac.wordpress.org/jetformbuilder
Etiquetas SVN: plugins.svn.wordpress.org/jetformbuilder
Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null
GNU Affero GPL v3.0. Ver LICENSE.
El cliente se comunica con loopback. Usarlo contra sistemas que no son tuyos no está autorizado por Abraxas Labs. Sin garantía.