El 20 de agosto de 2020, el equipo de Wordfence Threat Intelligence tomó conocimiento de varias vulnerabilidades que se habían parcheado en las Reglas de descuento para WooCommerce , un complemento de WordPress instalado en más de 40,000 sitios. Lanzamos una regla de firewall para proteger contra estas vulnerabilidades el mismo día. Durante nuestra investigación, también descubrimos un conjunto separado de vulnerabilidades en el complemento que aún no se habían parcheado y lanzamos una regla de firewall para proteger contra estas vulnerabilidades separadas al día siguiente, el 21 de agosto de 2020.
Nos comunicamos con el equipo del complemento en Flycart el 21 de agosto de 2020 y recibimos una respuesta casi de inmediato. Después de proporcionar la divulgación completa de la vulnerabilidad, Flycart nos informó que estaban al tanto de uno de los problemas que revelamos y lanzó un parche provisional el 22 de agosto de 2020. Flycart siguió con un parche más completo el 2 de septiembre de 2020 y un parche que abordó el último de los problemas el 9 de septiembre de 2020.
complemento afectado de Cross-Site Scripting (XSS) almacenado : Reglas de descuento para el
complemento WooCommerce Slug : woo-discount-rules
Versiones afectadas : <2.2.1
ID de CVE : Pendiente
CVSS Puntaje : 7.4 (Alto)
CVSS Vector : CVSS: 3.0 / AV: N / AC: L / PR: L / UI: N / S: C / C: L / I: L / A: L
Versión totalmente parcheada : 2.2.1
Reglas de descuento para WooCommerce es un complemento de WordPress diseñado para funcionar con el complemento de comercio electrónico de WooCommerce para crear reglas personalizadas para descuentos, como los especiales “2 por 1”.
Las vulnerabilidades que fueron parcheadas originalmente en el complemento eran acciones AJAX presentes en la base de código “v2” del complemento que permitían a cualquier visitante del sitio agregar, modificar y eliminar estas reglas y ver los cupones existentes. Desafortunadamente, el complemento mantuvo una base de código “v1” separada que contiene una versión anterior de esta funcionalidad. Cualquiera que visite el sitio podría cambiar entre la base de código v1 y v2 visitando cualquier página del sitio y agregando un awdr_switch_plugin_to
parámetro de cadena de consulta establecido en v1
o v2
.
31
32
33
34
|
if (isset( $_GET [ 'awdr_switch_plugin_to' ]) && in_array( $_GET [ 'awdr_switch_plugin_to' ], array ( 'v1' , 'v2' ))) { $awdr_switched_to_version = $version = sanitize_text_field( $_GET [ 'awdr_switch_plugin_to' ]); update_option( 'advanced_woo_discount_rules_load_version' , $version ); } |
El parche inicial lanzado el 22 de agosto de 2020 agregó una verificación de capacidad para evitar este cambio, pero los sitios que usaban el código “v1” seguían siendo vulnerables.
Una vez que el complemento se configuró para usar la base de código “v1”, varias acciones AJAX estuvieron disponibles proporcionando una funcionalidad similar a las acciones parcheadas en “v2”:
183
184
185
186
187
188
189
190
191
192
193
|
add_action( 'wp_ajax_savePriceRule' , array ( $this ->discountBase, 'savePriceRule' )); add_action( 'wp_ajax_saveCartRule' , array ( $this ->discountBase, 'saveCartRule' )); add_action( 'wp_ajax_saveConfig' , array ( $this ->discountBase, 'saveConfig' )); add_action( 'wp_ajax_resetWDRCache' , array ( $this ->discountBase, 'resetWDRCache' )); add_action( 'wp_ajax_loadProductSelectBox' , array ( $this ->discountBase, 'loadProductSelectBox' )); add_action( 'wp_ajax_loadCoupons' , array ( $this ->discountBase, 'loadCoupons' )); add_action( 'wp_ajax_UpdateStatus' , array ( $this ->discountBase, 'updateStatus' )); add_action( 'wp_ajax_RemoveRule' , array ( $this ->discountBase, 'removeRule' )); add_action( 'wp_ajax_doBulkAction' , array ( $this ->discountBase, 'doBulkAction' )); add_action( 'wp_ajax_createDuplicateRule' , array ( $this ->discountBase, 'createDuplicateRule' )); |
Al igual que las funciones parcheadas anteriores, las funciones AJAX “v1” no realizaban comprobaciones de capacidad ni comprobaciones nonce. A diferencia de las acciones AJAX que se parchearon en la base de código “v2”, estas acciones requerían que un usuario iniciara sesión. Debido a la naturaleza del comercio electrónico, la mayoría de las tiendas en línea permiten que los clientes potenciales se registren antes de realizar una compra, por lo que esto No ha sido un gran obstáculo para los atacantes.
Además de permitir que los atacantes vean todos los cupones disponibles en un sitio y activen, dupliquen y eliminen las reglas de descuento, al menos dos de las acciones, savePriceRule
y saveCartRule
también eran vulnerables a Cross-Site Scripting (XSS) almacenado en varios de los campos de reglas.
Por ejemplo, un atacante podría enviar una POST
solicitud a wp-admin/admin-ajax.php
con el action
conjunto en savePriceRule
o saveCartRule
e inyectar JavaScript malicioso en uno de los campos de una regla de descuento agregándolo al data
parámetro. La próxima vez que un administrador vea o edite las reglas de descuento, el JavaScript malicioso se ejecutará en su navegador. Si lo hace, podría llevar a la toma de control del sitio al agregar una puerta trasera a los archivos de complementos o temas, agregar un administrador malintencionado o cualquier otra cantidad de acciones.
Cronología
20 de agosto de 2020 : el equipo de inteligencia de amenazas de Wordfence se da cuenta de una vulnerabilidad en las reglas de descuento para Woocommerce. Lanzamos una regla de firewall a los usuarios de Wordfence Premium para abordar esta vulnerabilidad y descubrir una vulnerabilidad separada sin parche.
21 de agosto de 2020 : publicamos una regla de firewall para la vulnerabilidad sin parche para los usuarios de Wordfence Premium, contactamos a los desarrolladores del complemento, Flycart, y les enviamos la divulgación.
22 de agosto de 2020 : Flycart lanza un parche provisional que evita que los usuarios no autorizados cambien entre el código base ‘v1’ y ‘v2’ y responde a nuestra divulgación, advirtiéndonos que están trabajando en un parche.
2 de septiembre de 2020Flycart lanza un parche que cubre en gran medida las vulnerabilidades, pero deja la funcionalidad de cambio de versión vulnerable a los ataques CSRF.
9 de septiembre de 2020 : Flycart lanza un parche final que aborda todas las vulnerabilidades.
19 de septiembre de 2020 : la regla de firewall inicial está disponible para los usuarios de Wordfence Free.
20 de septiembre de 2020 : la segunda regla de firewall está disponible para los usuarios de Wordfence Free.
Conclusión
En el artículo de hoy, detallamos múltiples vulnerabilidades presentes en las Reglas de descuento para WooCommerce, incluidas dos acciones AJAX vulnerables que podrían usarse para hacerse cargo de un sitio. Recomendamos encarecidamente actualizar a la última versión de este complemento, actualmente 2.2.1, lo antes posible, ya que las consecuencias de una infracción en un sitio de comercio electrónico pueden ser graves.
Los usuarios de Wordfence Premium recibieron una regla de firewall para las vulnerabilidades iniciales el 20 de agosto y una regla de firewall para las vulnerabilidades recién descubiertas el 21 de agosto de 2020. Los sitios que aún ejecutan la versión gratuita de Wordfence recibirán estas reglas después de 30 días, el 19 de septiembre y 20 de septiembre de 2020.