
Preuve de concept d'exploit pour CVE-2026-12793, une élévation de privilèges non authentifiée dans WordPress JetFormBuilder jusqu'à la version 3.6.2 qui crée des comptes administrateur.
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-12793
JetFormBuilder 3.6.2 - jetmonsters
Je suis @abraxas_null. Labo en loopback. Le client est CVE-2026-12793-Abraxas-Labs.py.
L'avis nommait un champ. _jet_engine_booking_form_id est un champ POST, pas un HTTP action=. set_form_id ne fait que absint(). get_blocks_by_post analyse n'importe quel post. Un post ordinaire avec les bons blocs et _jf_actions register-user administrator suffit. Le hook du routeur actif n'est pas la valeur par défaut du produit jet_form_builder_submit=submit. Corrigé dans 3.6.2.1.
| CVE | CVE-2026-12793 · CVE.org |
| CWE | CWE-269 |
| CVSS | Critique : 9.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Produit | JetFormBuilder - Dynamic Blocks Form Builder |
| Affecté | toutes les versions jusqu'à 3.6.2 (incluse) |
| Corrigé | 3.6.2.1 et ultérieures |
| Auth | aucune |
| Licence | GNU Affero GPL v3.0 |
| Labo | 127.0.0.1 uniquement |
Un POST / non authentifié avec la paire de hooks active, cet id de post, et login/email/password. JSON status: success plus un user_id numérique. Cet utilisateur est un administrateur. La création de l'utilisateur est la preuve.
Wordfence nommait _jet_engine_booking_form_id. J'ai lu set_form_id, puis get_blocks_by_post, puis le gestionnaire d'action. La table d'options réécrit la paire du routeur au premier chargement.
Découvrez la paire comme un visiteur : GET le document REST public du post porteur. POST / avec method=ajax, la paire de hooks active, et l'id du formulaire. JSON court, quelques dizaines d'octets. Si vous lisez encore un DOCTYPE, vous êtes encore perdu.
Fausses pistes : jet_form_builder_submit=submit renvoie ~80k de HTML de thème ; REST /jet-form-builder/v1/validate-field est la mauvaise porte sur 3.6.2 ; se battre contre le nonce (load_nonce=hide, use_csrf=false sur le fixture) ; un subscriber parce que _jf_actions user_role n'était pas administrator (erreur de seed, pas un correctif) ; soumettre un vrai id de CPT jet-form-builder (le produit qui fonctionne).
Port 8088. JetFormBuilder 3.6.2. Slug du post porteur jfb-lab-carrier (post, pas jet-form-builder) avec la paire de hooks affichée dans REST.
Ciblez uniquement 127.0.0.1:8088 (ou le loopback que vous avez lié).
cd lab
docker compose up --force-recreate
python3 ../CVE-2026-12793-Abraxas-Labs.py
Témoin : JSON {"user_id":N,"status":"success"} et /wp/v2/users/<id> est administrateur. Le HTML du thème n'est pas ça.
Façons de perdre sans rien apprendre :
/ 200, ~80k HTML, hook par défautMettez à jour JetFormBuilder vers 3.6.2.1 ou plus récent. Relancez CVE-2026-12793-Abraxas-Labs.py contre la version corrigée : le user_id administrateur ne doit pas apparaître.
www.wordfence.com/threat-intel/vulnerabilities/id/a61b2ecc-d4e1-4e71-9187-ddc3d3616a29?source=cve
Répertoire de plugins : jetformbuilder
Navigateur Trac : plugins.trac.wordpress.org/jetformbuilder
Tags SVN : plugins.svn.wordpress.org/jetformbuilder
Abraxas Labs : abraxaslabs.tech · github.com/abraxas · @abraxas_null
GNU Affero GPL v3.0. Voir LICENSE.
Le client communique avec le loopback. L'utiliser contre des systèmes que vous ne possédez pas n'est pas autorisé par Abraxas Labs. Aucune garantie.