
Subida Arbitraria de Archivos No Autenticada en el Plugin EventPrime
Aviso de exención de responsabilidad: Este repositorio se crea con fines educativos y divulgación ética exclusivamente. La vulnerabilidad ha sido reportada responsablemente al proveedor y ha sido parcheada. No utilice esta información para explotar sistemas sin la debida autorización.
Se descubrió una vulnerabilidad de Carga Arbitraria de Archivos sin Autenticación en el plugin EventPrime para WordPress (versiones <= 4.2.8.1). Este fallo permite que cualquier visitante no autenticado cargue archivos directamente en el directorio uploads de WordPress y cree registros de adjuntos en la Biblioteca de Medios.
La vulnerabilidad existe porque un endpoint AJAX específico está registrado explícitamente con nopriv (accesible públicamente) y carece tanto de comprobaciones de autorización como de una validación adecuada del contenido del archivo. Los atacantes pueden abusar de este endpoint para provocar el agotamiento del almacenamiento, saturar la biblioteca de medios o, potencialmente, cargar payloads maliciosos disfrazados de imágenes.
<= 4.2.8.1La causa raíz es una combinación de registro inseguro de hooks AJAX y una validación insuficiente de archivos.
1. Registro Inseguro del Endpoint AJAX:
En includes/class-eventprime-event-calendar-management.php, el plugin registra la acción upload_file_media. Alrededor de la línea 557, establece {upload_file_media: true} en su mapa de acciones, donde true indica soporte _nopriv. En consecuencia, el hook wp_ajax_nopriv_ep_upload_file_media se registra, haciendo que el endpoint esté disponible para cualquier persona.
2. Ausencia de Comprobaciones de Autorización y Nonce:
La función manejadora upload_file_media() (en includes/class-ep-ajax.php, líneas 1659-1697) no utiliza current_user_can() para verificar los privilegios de carga ni verifica un nonce de seguridad.
3. Lógica de Validación Defectuosa:
El manejador solo valida la extensión del archivo (por ejemplo, jpg/jpeg/png/gif) basándose en el nombre de archivo proporcionado por el cliente (líneas 1661-1664). No realiza una validación robusta del contenido en el servidor (como getimagesize() o wp_check_filetype_and_ext()). Esto implica que scripts maliciosos u otros tipos de archivo renombrados a harmless.jpg se escribirán en el disco antes de que WordPress intente generar los metadatos.
4. Persistencia:
El archivo se guarda usando move_uploaded_file() directamente en wp_upload_dir()['path'] y se crea un adjunto de WordPress mediante wp_insert_attachment().
imágenes), esto podría conducir a la Ejecución Remota de Código (RCE).1. Preparar el Payload: Cree un archivo de imagen de muestra en su máquina local llamado poc.jpg.
2. Ejecutar la Solicitud: Envíe una solicitud POST multipart/form-data al endpoint AJAX público sin cookies de sesión:
curl -i \
-F "[email protected];filename=poc.jpg" \
"http://TARGET_SITE/wp-admin/admin-ajax.php?action=ep_upload_file_media"
3. Observar la Respuesta: El servidor responderá con un 200 OK y devolverá un objeto JSON que contiene el ID del adjunto recién creado:
{"success":true,"data":{"attachment_id":117}}
4. Verificación:
wp-content/uploads/<year>/<month>/poc.jpg.Para resolver esta vulnerabilidad, los desarrolladores deben:
nopriv si la carga está diseñada solo para usuarios autenticados.current_user_can('upload_files') para garantizar que solo usuarios autorizados y privilegiados puedan cargar archivos.check_ajax_referer() para prevenir ataques CSRF.wp_handle_upload()) que realizan comprobaciones más estrictas de tipo MIME y contenido.