Durante una auditoría interna del plugin WP Fastest Cache, detectamos una vulnerabilidad de inyección de SQL autenticada y un problema de XSS almacenado (secuencias de comandos entre sitios) mediante falsificación de peticiones entre sitios (CSRF).
Si se explota, el error de inyección SQL podría conceder a atacantes acceso a información privilegiada de la base de datos del sitio afectado (por ejemplo, nombres de usuario y contraseñas con hash). Solo se puede explotar si el classic-editor también está instalado y activado en el sitio.
La explotación con éxito de la vulnerabilidad de CSRF y XSS almacenado podría permitir a actores maliciosos realizar cualquier acción que pudiera llevar a cabo en el sitio objetivo el administrador cuya sesión hubieran atacado.
Informamos de las vulnerabilidades al autor de este plugin por correo electrónico, y recientemente publicó la versión 0.9.5 para corregirlas. Te recomendamos encarecidamente que actualices a la versión más reciente del plugin y que dispongas de una solución de seguridad consolidada en tu sitio, como Jetpack Security.
Detalles
Nombre del plugin: WP Fastest Cache
URI del plugin: https://wordpress.org/plugins/wp-fastest-cache/
Autor: https://www.wpfastestcache.com/
Las vulnerabilidades
Inyección SQL autenticada
Versiones afectadas: < 0.9.5
ID de CVE: CVE-2021-24869
CVSSv3.1: 7.7
CWSS: 73.6
public static function set_urls_with_terms(){
global $wpdb;
$terms = $wpdb->get_results("SELECT * FROM `".$wpdb->prefix."term_relationships` WHERE `object_id`=".static::$id, ARRAY_A);
foreach ($terms as $term_key => $term_val){
static::set_term_urls($term_val["term_taxonomy_id"]);
}
}
El método set_urls_with_terms concatena directamente static::$id a una consulta SQL, lo que supone un problema, ya que cualquier usuario que haya iniciado sesión puede almacenar valores arbitrarios en esa propiedad mediante el método SinglePreloadWPFC::set_id(). Este método se ejecuta cuando se activa la acción admin_notices de WordPress.
public static function set_id(){
if(isset($_GET["post"]) && $_GET["post"]){
static::$id = esc_sql($_GET["post"]);
if(get_post_status(static::$id) != "publish"){
static::$id = 0;
}
}
}
Aunque set_id comprueba que el ID proporcionado apunta a una entrada válida y publicada mediante la función get_post_status(), esto no es suficiente para validar que solo contiene ese ID.
La función get_post_status() finalmente utiliza get_post() internamente, que convierte el ID que recibe en un entero antes de consultar la base de datos para obtener la entrada relacionada.
En pocas palabras, si el ID proporcionado es 1234 OR 1=1, get_post_status() recuperará el estado de la entrada cuyo ID es 1234, pero 1234 OR 1=1 se concatenará a la consulta SQL vulnerable en SinglePreloadWPFC::set_urls_with_terms().
XSS almacenado mediante CSRF
Versiones afectadas: < 0.9.5
ID de CVE: CVE-2021-24870
CVSSv3.1: 9.6
CWSS: 74.7
El método CdnWPFC::save_cdn_integration() lo utiliza la acción AJAX wp_ajax_wpfc_save_cdn_integration para configurar opciones específicas de CDN. Aunque realizaba comprobaciones de privilegios como current_user_can() para garantizar que quien enviara esa solicitud tuviera permiso para cambiar esos ajustes, no validaba que tuviera intención de hacerlo, que es lo que hacen las comprobaciones de nonce.
Además, descubrimos que los atacantes podrían abusar potencialmente de algunas de estas opciones para almacenar JavaScript malicioso en el sitio web afectado.
Cronología
Al principio, los autores se mostraron reacios a reconocer el problema de CSRF, pero, tras obtener una segunda opinión del equipo de plugins de WordPress, lo corrigieron en la versión 0.9.5.
2021-09-28 – Contacto inicial con WP Fastest Cache
2021-09-29 – Les enviamos los detalles sobre estas vulnerabilidades
2021-10-01 – Compartimos con ellos un vídeo de prueba de concepto para demostrar el riesgo que plantea el CSRF
2021-10-01 – Nos ponemos en contacto con el equipo de plugins de WordPress para pedir ayuda
2021-10-11 – Se publica WP Fastest Cache 0.9.5
Conclusión
Te recomendamos que compruebes qué versión del plugin WP Fastest Cache utiliza tu sitio y, si es anterior a la 0.9.5, ¡que actualices el plugin lo antes posible!
En Jetpack, trabajamos intensamente para garantizar que tus sitios web estén protegidos frente a este tipo de vulnerabilidades. Te recomendamos que dispongas de un plan de seguridad para tu sitio que incluya análisis de archivos maliciosos y copias de seguridad. Jetpack Security es una excelente opción de seguridad de WordPress para garantizar la seguridad de tu sitio y de quienes lo visitan.
Créditos
Investigador original: Marc Montpas
Gracias al resto del equipo de Jetpack Scan por sus comentarios, ayuda y correcciones.



