Vulnerabilidad descubierta en Elementor Pro 3.11.6

¿Quizás recibió ayer este correo electrónico de Elementor sobre una vulnerabilidad de seguridad crítica descubierta en las versiones 3.11.6 de Elementor Pro? Esta vulnerabilidad se puede aprovechar si WooCommerce también está instalado en su sitio web. contenía el siguiente mensaje:

Mensaje de correo electrónico de Elementor

El siguiente mensaje está traducido del inglés al holandés.

Estimado cliente,

Nos gustaría informarle sobre una vulnerabilidad de seguridad crítica descubierta en las versiones 3.11.6 y anteriores de Elementor Pro. Esta vulnerabilidad se puede aprovechar si WooCommerce también está instalado en su sitio web.

Para proteger su sitio web y garantizar la seguridad, le recomendamos encarecidamente que actualice su complemento Elementor Pro a la última versión de inmediato. Siga estos sencillos pasos para completar la actualización:

  • Inicie sesión en el panel de administración de WordPress.
  • Vaya a ‘Complementos’ en el menú de la izquierda.
  • Busque Elementor Pro o PRO Elements en la lista de complementos instalados.
  • Haga clic en el botón ‘Actualizar ahora’ para iniciar el proceso de actualización.

Una vez que se complete la actualización, su sitio web estará protegido de la vulnerabilidad de seguridad y podrá continuar usando Elementor Pro con confianza. Si encuentra algún problema o tiene alguna pregunta durante el proceso de actualización, no dude en comunicarse con nuestro equipo de soporte. Estamos listos para ayudarlo y garantizar que su sitio web permanezca seguro.

Nos disculpamos por cualquier inconveniente que esto pueda causar y agradecemos su pronta atención a este asunto. Mantener su sitio web seguro es nuestra principal prioridad y continuamos trabajando arduamente para abordar cualquier problema de seguridad y mantenerlo informado.

Gracias por elegir nuestros servicios y por su cooperación para mantener un entorno en línea seguro.

Saludos cordiales, equipo de Dream-Theme.

¿Qué significa esta vulnerabilidad?

Cuando Elementor Pro se instala en un sitio con WooCommerce habilitado, se carga el componente «elementor-pro/modules/woocommerce/module.php», que registra una serie de acciones AJAX:

				
					/**
 * Register Ajax Actions.
 *
 * Registers ajax action used by the Editor js.
 *
 * @since 3.5.0
 *
 * @param Ajax $ajax
 */
public function register_ajax_actions( Ajax $ajax ) {
   // `woocommerce_update_page_option` is called in the editor save-show-modal.js.
   $ajax->register_ajax_action( 'pro_woocommerce_update_page_option', [ $this, 'update_page_option' ] );
   $ajax->register_ajax_action( 'pro_woocommerce_mock_notices', [ $this, 'woocommerce_mock_notices' ] );
}
				
			

Uno de ellos es pro_woocommerce_update_page_option, que utiliza el editor integrado de Elementor. Llama a update_option, una función que se puede usar para cambiar las opciones de WordPress en la base de datos, con dos entradas del usuario:

				
					/**
 * Update Page Option.
 *
 * Ajax action can be used to update any WooCommerce option.
 *
 * @since 3.5.0
 *
 * @param array $data
 */
public function update_page_option( $data ) {
   update_option( $data['option_name'], $data['editor_post_id'] );
}
				
			

Esta función está destinada a permitir que el administrador o el gerente de la tienda actualice algunas opciones específicas de WooCommercerce, pero la entrada del usuario no se valida y la función carece de una verificación de capacidad para limitar el acceso a un usuario privilegiado.

Elementor usa su propio controlador AJAX para administrar la mayoría de sus acciones AJAX, incluida pro_woocommerce_update_page_option, con la acción global elementor_ajax. Esto se encuentra en el script «elementor/core/common/modules/ajax/module.php» de la versión gratuita (que es necesario para ejecutar Elementor Pro):

				
					/**
 * Handle ajax request.
 *
 * Verify ajax nonce, and run all the registered actions for this request.
 *
 * Fired by `wp_ajax_elementor_ajax` action.
 *
 * @since 2.0.0
 * @access public
 */
public function handle_ajax_request() {
   if ( ! $this->verify_request_nonce() ) {
      $this->add_response_data( false, esc_html__( 'Token Expired.', 'elementor' ) )
         ->send_error( Exceptions::UNAUTHORIZED );
   }
   ...
				
			

Podemos ver que contiene una verificación nonce que potencialmente podría evitar que los malos actores aprovechen la vulnerabilidad. Pero el nonce y todo el código JS asociado con él se carga a través del gancho admin_enqueue_scripts en «elementor/core/common/app.php»:

				
					add_action( 'admin_enqueue_scripts', [ $this, 'register_scripts' ] );

				
			

Entonces se filtra en la fuente de la página a todos los usuarios que han iniciado sesión:

Kwetsbaarheid ontdekt in Elementor Pro

Un atacante autenticado podría aprovechar la vulnerabilidad para crear una cuenta de administrador habilitando el registro (users_can_register) y estableciendo el rol predeterminado (default_role) en «administrador», cambiando la dirección de correo electrónico del administrador (admin_email) o, como se muestra a continuación, redirigiendo todo el tráfico a un sitio web malicioso externo cambiando la URL del sitio, entre otras cosas:

MariaDB [example]> SELECT * FROM `wp_options` WHERE `option_name`='siteurl';
+-----------+-------------+------------------+----------+
| option_id | option_name | option_value     | autoload |
+-----------+-------------+------------------+----------+
|         1 | siteurl     | https://slechteurl.nl| yes      |
+-----------+-------------+------------------+----------+
1 row in set (0.001 sec)

Debido a que el componente vulnerable requiere la instalación de WooCommerce, un usuario no autenticado puede crear una cuenta de cliente de WooCommerce, iniciar sesión y también explotar la vulnerabilidad (los clientes de WooCommerce pueden obtener acceso al backend agregando wc-ajax=1 a la consulta, por ejemplo https://example.com/wp-admin/?wc-ajax=1).

La vulnerabilidad se descubrió y se informó a los autores el 18 de marzo de 2023 y se lanzó una nueva versión 3.11.7 el 22 de marzo de 2023.

Solución para el proveedor de WP

No tiene que hacer nada si utiliza alojamiento administrado a través del proveedor de WP, su versión 3.11.6 de Elementor Pro se ha actualizado a la última versión.

Solución para usuarios que no son proveedores de WP

La solución es actualizar a la nueva versión 3.11.7 de Elementor Pro lo antes posible. Compruebe siempre si las versiones más recientes son compatibles con los complementos y temas utilizados.

Si actualmente aloja varios sitios web de WordPress y no lo hace a través de nosotros, puede usar uno de nuestros scripts bash de WordPress que se puede encontrar en nuestra página de Github.

Por ejemplo, utilice nuestro script bash para ver qué sitios web todavía se ejecutan en 3.11.6: https://github.com/wpprovider/bash-scripts/blob/main/check-elementor-pro-version.sh

Y para hacerlo aún más fácil, el siguiente script bash para actualizar también estos sitios web a 3.11.7: https://github.com/wpprovider/bash-scripts/blob/main/update-specific-elementor-pro-version.sh

Obtenga más información sobre esta vulnerabilidad directamente de la fuente.

Solicite un punto de referencia ahora

¿Sientes que tu sitio web podría ser más rápido? Ejecutemos un punto de referencia. ¡Le garantizamos que su sitio web funcionará más rápido en nuestro hosting!