Elementor Pro corrige una vulnerabilidad crítica de subida arbitraria de archivos
Elementor Pro ha corregido una vulnerabilidad crítica de subida arbitraria de archivos que afecta a todas las versiones hasta la 4.2.1, incluida. El fallo permite que un atacante sin autenticar suba archivos ejecutables, como scripts PHP, y llegue a ejecutar código remoto en el servidor hasta tomar el control completo del sitio.
Actualiza Elementor Pro
Instala Elementor Pro 4.2.2 o una versión posterior cuanto antes. La versión 4.2.2, publicada el 19 de agosto de 2026, corrige completamente la vulnerabilidad CVE-2026-32475.
Qué sitios están expuestos
La vulnerabilidad tiene una puntuación CVSS de 9,8 sobre 10 y se identifica como CVE-2026-32475. Afecta a Elementor Website Builder Pro, con slug elementor-pro, en las versiones 4.2.1 y anteriores.
Un sitio solo resulta explotable si ha publicado una página que contiene un widget Form de Elementor Pro con, al menos, un campo File Upload que no sea obligatorio. El atacante no necesita una cuenta de WordPress ni permisos previos para enviar el formulario vulnerable.
El error de validación que abre la puerta
El widget Form procesa envíos públicos mediante ajax_send_form() en la clase Ajax_Handler. El plugin encapsula los datos enviados y los archivos en un objeto Form_Record, y deriva los campos de archivo a los métodos validation() y process_field() de ElementorProModulesFormsFieldsUpload.
El problema está en el bucle de validation(). Cuando un campo de archivo no es obligatorio y el primer elemento del array de archivos indica UPLOAD_ERR_NO_FILE, el código ejecuta return. Esa instrucción termina la validación completa del campo, en vez de omitir solo la posición vacía.
foreach ( $files[ $id ] as $index => $file ) {
// Si el campo no es obligatorio y esta posición está vacía,
// el código vulnerable termina toda la validación.
if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
return;
}
if ( $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
$ajax_handler->add_error( $id, $upload_errors[ $file['error'] ] );
return;
}
if ( $file['error'] > UPLOAD_ERR_OK ) {
$ajax_handler->add_error( $id, $upload_errors[ $file['error'] ] );
return;
}
if ( ! $this->is_file_type_valid( $field, $file ) ) {
$ajax_handler->add_error( $id, esc_html__( 'This file type is not allowed.', 'elementor-pro' ) );
}
if ( ! $this->is_file_size_valid( $field, $file ) ) {
$ajax_handler->add_error( $id, esc_html__( 'This file exceeds the maximum allowed size.', 'elementor-pro' ) );
}
}El comportamiento correcto habría usado continue: así el bucle saltaría la entrada vacía y validaría los archivos siguientes. Con return, en cambio, no se ejecutan ni is_file_type_valid() ni la comprobación de tamaño para el resto de elementos del mismo campo.
Cómo llega un archivo PHP al directorio de subidas
El ataque aprovecha un campo de subida enviado como array con dos elementos. El primero está vacío y activa UPLOAD_ERR_NO_FILE; el segundo incluye el archivo malicioso. La salida prematura evita que Elementor Pro compruebe la extensión y el tipo del segundo archivo.
Aunque la validación se detiene antes de tiempo, process_field() sí emplea continue para ignorar la entrada vacía. Por eso continúa con el segundo elemento, toma su extensión directamente del nombre que envía el cliente y lo mueve al directorio de subidas.
foreach ( $files[ $id ] as $index => $file ) {
if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
// Aquí se omite solo la posición vacía.
continue;
}
$uploads_dir = $this->get_ensure_upload_dir();
$file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );
$filename = uniqid() . '.' . $file_extension;
$filename = wp_unique_filename( $uploads_dir, $filename );
$new_file = trailingslashit( $uploads_dir ) . $filename;
if ( is_dir( $uploads_dir ) && is_writable( $uploads_dir ) ) {
$move_new_file = Plugin::instance()->php_api->move_uploaded_file(
$file['tmp_name'],
$new_file
);
}
}Como el proceso conserva la extensión proporcionada en el nombre del archivo, puede escribir un archivo .php en /wp-content/uploads/elementor/forms/. Después, un atacante puede solicitar ese archivo para ejecutar el código PHP que contiene. Las subidas arbitrarias de archivos pueden derivar en una intrusión total mediante webshells u otras técnicas.
Cronología de la corrección
- El 24 de julio de 2026 se recibió el aviso de la vulnerabilidad de subida arbitraria de archivos sin autenticación.
- El 27 de julio de 2026 se validó el informe, se confirmó una prueba de concepto y se comunicó el fallo al equipo de Elementor.
- El 2 de agosto de 2026, Elementor indicó que también había recibido otro aviso sobre la misma vulnerabilidad y que trabajaba en una corrección.
- El 19 de agosto de 2026 se publicó Elementor Pro 4.2.2 con la corrección completa.
Qué debes hacer ahora
Comprueba la versión de Elementor Pro en el escritorio de WordPress y actualiza a la 4.2.2 o a una versión posterior. Revisa con prioridad los sitios que tengan páginas públicas con formularios de Elementor Pro y campos File Upload opcionales.
Si administras varios sitios, verifica cada instalación: basta una instancia que permanezca en la versión 4.2.1 o anterior y exponga ese tipo de formulario para mantener el riesgo. Wordfence notificó y documentó esta vulnerabilidad crítica.
María García
Editora del equipo español, especialista en e-commerce y WooCommerce. Construir y optimizar tiendas online es mi perfil principal. Disfruto de las soluciones creativas.
Todas las publicaciones