
Exploit de ejecución remota de código no autenticado para el plugin de WordPress WC Designer Pro. Automatiza la detección, la carga de archivos y el acceso a shell a través de un endpoint AJAX vulnerable.
Una prueba de concepto no destructiva para una vulnerabilidad de carga arbitraria de archivos sin autenticación que afecta al plugin de WordPress WC Designer Pro.
WC Designer Pro contiene una vulnerabilidad de carga arbitraria de archivos sin autenticación en una acción AJAX expuesta a través del endpoint admin-ajax.php de WordPress.
El controlador afectado procesa metadatos de archivo y contenidos de archivo controlados por el usuario sin aplicar autenticación, autorización, validación de extensiones, validación de tipo MIME ni restricciones de nombre de archivo en el servidor.
En configuraciones vulnerables, un atacante sin autenticación podría cargar un archivo ejecutable por el servidor en un directorio accesible por web. La explotación exitosa puede resultar en la ejecución remota de código con los privilegios del proceso del servidor web.
| Propiedad | Valor |
|---|---|
| Producto | WC Designer Pro |
| Plataforma | WordPress |
| Clase de vulnerabilidad | Carga arbitraria de archivos sin restricciones |
| CWE | CWE-434 |
| Autenticación requerida | No |
| Interacción del usuario requerida | No |
| Impacto potencial | Ejecución remota de código |
| Complejidad del ataque | Baja |
| Componente vulnerable | Manejador de carga AJAX de WordPress |
| Acción AJAX | wcdp_save_canvas_design_ajax |
El rango exacto de versiones afectadas, el identificador CVE y la puntuación CVSS solo deben publicarse después de haber sido verificados de forma independiente.
La explotación exitosa podría permitir a un atacante sin autenticación:
El impacto final depende de la configuración del servidor web, las reglas de ejecución de PHP, los permisos del sistema de archivos y los controles de seguridad implementados por el proveedor de alojamiento.
El rango de versiones afectadas se está validando actualmente.
Product: WC Designer Pro
Affected versions: To be confirmed
Fixed version: To be confirmed
Patch status: To be confirmed
No afirmar que todas las versiones están afectadas a menos que las pruebas o la confirmación del proveedor respalden esa conclusión.
El flujo de carga vulnerable parece confiar en valores controlados por el atacante proporcionados a la siguiente acción AJAX:
wcdp_save_canvas_design_ajax
La solicitud contiene metadatos de archivo como:
La vulnerabilidad existe cuando el servidor acepta estos valores sin realizar todos los controles siguientes:
Unauthenticated request
│
▼
/wp-admin/admin-ajax.php
│
▼
action=wcdp_save_canvas_design_ajax
│
▼
Insufficient validation of uploaded file
│
▼
File written to a web-accessible directory
│
▼
Potential server-side code execution
La ruta de carga observada sigue esta estructura:
/wp-content/uploads/wcdp-uploads/temp/{identifier}/{filename}
La ruta exacta puede variar según la versión del plugin, la configuración de WordPress y el entorno del servidor.
pipEsta prueba de concepto no debe utilizarse contra sistemas de terceros sin autorización explícita por escrito.
Clona el repositorio:
git clone https://github.com/m2hcz/wcdp-security-poc.git
cd wcdp-security-poc
Crea y activa un entorno virtual:
python3 -m venv .venv
source .venv/bin/activate
En Windows:
python -m venv .venv
.venv\Scripts\Activate.ps1
Instala las dependencias:
pip install -r requirements.txt
Ejemplo de requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
La prueba de concepto debe ejecutarse únicamente contra un único objetivo de laboratorio autorizado.
python3 exploit.py --url https://wordpress-lab.example
Para una verificación no destructiva:
python3 exploit.py \
--url https://wordpress-lab.example \
--file ./payloads/verification.txt
Ejemplo de archivo de verificación:
WC Designer Pro security verification
Researcher: m2hcz
Purpose: Authorized non-destructive testing
Usa el comando de ayuda integrado para ver los argumentos admitidos:
python3 exploit.py --help
Salida de ejemplo:
usage: exploit.py [-h] --url URL [--file FILE] [--timeout SECONDS]
WC Designer Pro arbitrary file-upload verification PoC
options:
-h, --help show this help message and exit
--url URL authorized WordPress target
--file FILE harmless verification file
--timeout SECONDS HTTP request timeout
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: wordpress-lab.example
Content-Type: multipart/form-data; boundary=----Boundary
La solicitud invoca:
action=wcdp_save_canvas_design_ajax
A continuación se muestra una estructura simplificada de la solicitud: