Le 20 août 2020, l’équipe Wordfence Threat Intelligence a été informée de plusieurs vulnérabilités corrigées dans Règles de remise pour WooCommerce, un plugin WordPress installé sur plus de 40 000 sites. Nous avons publié une règle de pare-feu pour nous protéger contre ces vulnérabilités le même jour. Au cours de notre enquête, nous avons également découvert un ensemble distinct de vulnérabilités dans le plug-in qui n’avaient pas encore été corrigées, et avons publié une règle de pare-feu pour nous protéger contre ces vulnérabilités distinctes le lendemain, le 21 août 2020.

Nous avons contacté l’équipe du plugin chez Flycart le 21 août 2020 et avons reçu une réponse presque immédiatement. Après avoir fourni la divulgation complète de la vulnérabilité, Flycart nous a fait savoir qu’il était au courant de l’un des problèmes que nous avons divulgués et a publié un correctif provisoire le 22 août 2020. Flycart a suivi cela avec un correctif plus complet le 2 septembre 2020 et un correctif qui a résolu le dernier des problèmes le 9 septembre 2020.


La description: Contournement d’autorisations multiples menant à des scripts intersites (XSS) stockés
Plugin concerné: Règles de remise pour WooCommerce
Plugin Slug: woo-discount-rules
Versions affectées:
ID CVE: En attente
Score CVSS: 7,4 (élevé)
Vecteur CVSS: CVSS: 3.0 / AV: N / AC: L / PR: L / UI: N / S: C / C: L / I: L / A: L
Version entièrement corrigée: 2.2.1

Règles de remise pour WooCommerce est un plugin WordPress conçu pour fonctionner avec le plugin e-Commerce WooCommerce pour créer des règles personnalisées pour les remises, telles que les promotions «2 pour 1».

Les vulnérabilités initialement corrigées dans le plugin étaient des actions AJAX présentes dans la base de code «v2» du plugin qui permettaient à tout visiteur du site d’ajouter, de modifier et de supprimer ces règles et d’afficher les coupons existants. Malheureusement, le plugin maintenait une base de code «v1» distincte contenant une version antérieure de cette fonctionnalité. Toute personne visitant le site peut basculer entre la base de code v1 et v2 en visitant n’importe quelle page du site et en ajoutant un awdr_switch_plugin_to paramètre de chaîne de requête défini sur v1 ou v2.

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);
}

Le correctif initial publié le 22 août 2020 a ajouté un contrôle de capacité pour empêcher cette commutation, mais tous les sites utilisant le code «v1» étaient toujours vulnérables.

Une fois que le plugin a été configuré pour utiliser la base de code «v1», un certain nombre d’actions AJAX sont devenues disponibles, offrant des fonctionnalités similaires aux actions corrigées dans «v2»:

            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'));

À l’instar des fonctions patchées précédentes, les fonctions AJAX «v1» n’effectuaient pas de vérifications de capacités ou de vérifications nonce. Contrairement aux actions AJAX qui ont été corrigées dans la base de code «v2», ces actions nécessitaient la connexion d’un utilisateur. En raison de la nature du commerce électronique, la plupart des boutiques en ligne permettent aux clients potentiels de s’enregistrer avant d’effectuer un achat, ce qui n’ont pas été un obstacle majeur pour les attaquants.

En plus de permettre aux attaquants d’afficher tous les coupons disponibles sur un site et d’activer, de dupliquer et de supprimer des règles de remise, au moins deux des actions, savePriceRule et saveCartRule étaient également vulnérables au Cross-Site Scripting (XSS) stocké dans plusieurs des champs de règle.

Par exemple, un attaquant pourrait envoyer un POST demande à wp-admin/admin-ajax.php avec le action mis à savePriceRule ou saveCartRule et injectez du JavaScript malveillant dans l’un des champs d’une règle de remise en l’ajoutant au data paramètre. La prochaine fois qu’un administrateur afficherait ou modifierait les règles de remise, le JavaScript malveillant serait exécuté dans son navigateur. Cela pourrait conduire à la prise de contrôle du site en ajoutant une porte dérobée aux fichiers de plug-in ou de thème, en ajoutant un administrateur malveillant ou en un certain nombre d’autres actions.

Chronologie

20 août 2020 – L’équipe Wordfence Threat Intelligence a été mise au courant d’une vulnérabilité dans les règles de réduction pour Woocommerce. Nous publions une règle de pare-feu pour les utilisateurs de Wordfence Premium pour résoudre cette vulnérabilité et découvrir une vulnérabilité distincte non corrigée.
21 août 2020 – Nous publions une règle de pare-feu pour la vulnérabilité non corrigée aux utilisateurs de Wordfence Premium, contactons les développeurs du plugin, Flycart, et leur envoyons la divulgation.
22 août 2020 – Flycart publie un correctif provisoire empêchant les utilisateurs non autorisés de basculer entre la base de code «v1» et «v2» et répond à notre divulgation, nous informant qu’ils travaillent sur un correctif.
2 septembre 2020 – Flycart publie un correctif qui couvre largement les vulnérabilités mais laisse la fonctionnalité de changement de version vulnérable aux attaques CSRF.
9 septembre 2020 – Flycart publie un correctif final qui corrige toutes les vulnérabilités.
19 septembre 2020 – La règle de pare-feu initiale devient disponible pour les utilisateurs de Wordfence Free.
20 septembre 2020 – La deuxième règle de pare-feu devient disponible pour les utilisateurs de Wordfence Free.

Conclusion

Dans l’article d’aujourd’hui, nous avons détaillé plusieurs vulnérabilités présentes dans les règles de remise pour WooCommerce, y compris deux actions AJAX vulnérables qui pourraient être utilisées pour prendre le contrôle d’un site. Nous vous recommandons vivement de mettre à jour vers la dernière version de ce plugin, actuellement 2.2.1, dès que possible, car les conséquences d’une brèche sur un site e-Commerce peuvent être graves.

Wordfence Premium les utilisateurs ont reçu une règle de pare-feu pour les vulnérabilités initiales le 20 août et une règle de pare-feu pour les vulnérabilités nouvellement découvertes le 21 août 2020. Les sites exécutant toujours la version gratuite de Wordfence recevront ces règles après 30 jours, le 19 septembre et le 20 septembre , 2020.


Source link