Le 27 avril 2020, l’équipe de Wordfence Threat Intelligence a découvert une vulnérabilité CSRF (Cross-Site Request Forgery) dans Formes Ninja, un plugin WordPress avec plus d’un million d’installations. Cette vulnérabilité pourrait permettre à un attaquant d’inciter un administrateur à importer un formulaire de contact contenant du JavaScript malveillant et de remplacer tout formulaire de contact existant par la version malveillante.

Nous avons contacté l’équipe de sécurité de Ninja Form selon leur Lignes directrices sur la divulgation responsable et ils ont répondu en quelques heures. Le plugin a été corrigé moins de 24 heures après notre premier contact, le 28 avril 2020.

Tous les utilisateurs de Wordfence, y compris Wordfence Premium et les utilisateurs gratuits de Wordfence, sont protégés contre les tentatives XSS contre cette vulnérabilité par la protection XSS intégrée du pare-feu Wordfence.


La description: Falsification de demande intersite pour les scripts intersites stockés
Plugin concerné: Formes Ninja
Plugin Slug: formes de ninja
Versions concernées:
ID CVE: CVE-2020-12462
Score CVSS: 8,8 (Élevé)
Vecteur CVSS: CVSS: 3.0 / AV: N / AC: L / PR: N / UI: R / S: U / C: H / I: H / A: H
Version entièrement corrigée: 3.4.24.2

Le plugin Ninja Forms dispose d’un mode «hérité» qui permet aux utilisateurs de rétablir son style et ses fonctionnalités à ceux de la version 2.9.x finale du plugin. Dans le cadre de cette fonctionnalité, il ajoute plusieurs fonctions AJAX qui semblent destinées à importer des formulaires et des champs entre le mode «hérité» et le mode par défaut. Bien que toutes ces fonctions aient utilisé des vérifications de capacité, deux des fonctions n’ont pas réussi à vérifier les nonces, qui sont utilisés pour vérifier qu’une demande a été intentionnellement envoyée par un utilisateur légitime. Une fonction en particulier, ninja_forms_ajax_import_form, a permis d’importer des formulaires contenant du HTML personnalisé:

add_action( 'wp_ajax_ninja_forms_ajax_import_form', 'ninja_forms_ajax_import_form' );
function ninja_forms_ajax_import_form(){
   if( ! current_user_can( apply_filters( 'ninja_forms_admin_upgrade_import_form_capabilities', 'manage_options' ) ) ) return;

   $import = stripslashes( $_POST[ 'import' ] );

   $form_id = ( isset( $_POST[ 'formID' ] ) ) ? absint( $_POST[ 'formID' ] ) : '';

   WPN_Helper::delete_nf_cache( $form_id ); // Bust the cache.

   Ninja_Forms()->form()->import_form( $import, TRUE, $form_id, TRUE );

   if( isset( $_POST[ 'flagged' ] ) && $_POST[ 'flagged' ] ){
       $form = Ninja_Forms()->form( $form_id )->get();
       $form->update_setting( 'lock', TRUE );
       $form->save();
   }

   echo json_encode( array( 'export' => WPN_Helper::esc_html($_POST['import']), 'import' => $import ) );
   wp_die();
}

En tant que tel, si un attaquant était en mesure de tromper un administrateur en cliquant sur un lien spécialement conçu, il pouvait usurper une demande en utilisant la session de cet administrateur et importer un formulaire contenant du JavaScript malveillant sur le site. Pire encore, il a été possible de remplacer tout formulaire existant sur le site par l’un de ces formulaires importés en définissant formID $_POST paramètre à l’ID d’un formulaire existant.

Selon l’endroit où le JavaScript a été placé dans le formulaire importé, il peut être exécuté dans le navigateur d’une victime chaque fois qu’elle visite une page contenant le formulaire, chaque fois qu’un administrateur visite la page d’importation / exportation du plug-in, ou chaque fois qu’un administrateur tente de modifier l’un des champs du formulaire. Comme c’est généralement le cas avec les attaques XSS (Cross-Site Scripting), un script malveillant exécuté dans le navigateur d’un administrateur peut être utilisé pour ajouter de nouveaux comptes administratifs, ce qui entraîne une prise de contrôle complète du site, tandis qu’un script malveillant exécuté dans le navigateur d’un visiteur peut être utilisé pour rediriger ce visiteur d’un site malveillant.

Les politiques de divulgation des vulnérabilités sont importantes

L’une des raisons pour lesquelles ce plugin a été corrigé si rapidement est que l’équipe du plugin maintient une politique de divulgation de sécurité responsable, souvent appelée Politique de divulgation des vulnérabilités. Cela nous a permis de les contacter directement avec notre divulgation complète plutôt que de passer des jours à essayer de trouver ou de vérifier le canal de contact approprié. Bien que nous ayons parfois vu des plugins patchés en moins de 24 heures dans le passé, des réponses comme celle-ci sont exceptionnelles et indiquent un sérieux dévouement à la sécurité.

Si vous êtes responsable de tout type de produit ou service logiciel, le fait d’avoir une politique de divulgation des vulnérabilités (VDP) améliore non seulement vos chances d’être alerté de graves problèmes de sécurité, mais vous permet également de définir des attentes pour votre réponse. Plus important encore, cela réduit le risque que des vulnérabilités de vos produits soient révélées prématurément ou de manière irresponsable et attaquées par de mauvais acteurs avant que vous n’ayez la possibilité de les corriger. Pour ces raisons, nous vous recommandons fortement de mettre en œuvre un VDP pour améliorer non seulement l’efficacité de votre réponse à des failles spécifiques, mais également la sécurité générale de votre produit.

Chronologie

27 avril 2020 19:00 UTC – Notre équipe Threat Intelligence découvre et analyse la vulnérabilité et vérifie que nos règles de pare-feu existantes offrent une protection suffisante contre XSS.
27 avril 2020 19:24 UTC – Nous fournissons une divulgation complète au développeur du plugin conformément à leur politique de divulgation de sécurité responsable.
27 avril 2020 20:27 UTC – Nous recevons une réponse indiquant qu’un patch devrait être disponible le lendemain.
28 avril 2020 19:00 UTC – Version corrigée du plugin publiée.

Conclusion

Dans le post d’aujourd’hui, nous avons détaillé une vulnérabilité de contrefaçon de demande intersite dans le plugin WordPress de Ninja Forms. Cette faille a été entièrement corrigée dans la version 3.4.24.2, et nous recommandons à tous les utilisateurs de mettre à jour la dernière version disponible immédiatement. Sites en cours d’exécution Wordfence Premium, ainsi que les sites utilisant toujours la version gratuite de Wordfence, sont protégés contre les attaques de type Cross-Site Scripting contre cette vulnérabilité par la protection intégrée du pare-feu Wordfence. Si vous connaissez un ami ou un collègue qui utilise ce plugin, nous vous recommandons de leur transmettre cet avis dès que possible pour les aider à sécuriser leur site.


Source link