Le 17 décembre 2020, notre équipe Threat Intelligence a divulgué de manière responsable trois vulnérabilités dans Menu réactif, un plugin WordPress installé sur plus de 100 000 sites. La première faille a permis à des attaquants authentifiés avec des autorisations de bas niveau de télécharger des fichiers arbitraires et, finalement, d’exécuter du code à distance. Les deux autres failles ont permis aux attaquants de forger des requêtes qui modifieraient les paramètres du plugin et de télécharger à nouveau des fichiers arbitraires pouvant conduire à l’exécution de code à distance. Les trois vulnérabilités pourraient entraîner une prise de contrôle du site, ce qui pourrait avoir des conséquences telles que des portes dérobées, des injections de spam, des redirections malveillantes et d’autres activités malveillantes.

Nous avons d’abord tenté de contacter l’équipe de Responsive Menu via leur société mère ExpressTech le 17 décembre 2020. Après avoir reçu aucune réponse pendant quelques semaines, nous avons essayé de contacter via le formulaire de contact sur le site Responsive Menu le 4 janvier 2021, et à nouveau n’avons reçu aucune réponse après une semaine. À ce stade, nous avons estimé qu’il était préférable de faire remonter le problème à l’équipe des plugins WordPress le 10 janvier 2021. Nous avons reçu une réponse de l’équipe des plugins et du fondateur du plugin par la suite le 11 janvier 2021. Une fois le contact établi, ils ont été très rapides pour résoudre les problèmes et a publié un correctif le 19 janvier 2021.

Les trois failles corrigées sont considérées comme des vulnérabilités de gravité moyenne et critique. Par conséquent, nous vous recommandons vivement de mettre à jour immédiatement vers la version corrigée, 4.0.4.

Les utilisateurs de Wordfence Premium ont reçu une règle de pare-feu pour se protéger contre tout exploit visant ces vulnérabilités le 17 décembre 2020. Les sites utilisant toujours la version gratuite de Wordfence ont reçu la même protection le 16 janvier 2021.

La description: Téléchargement de fichier arbitraire authentifié
Plugin concerné: Menu réactif
Plugin Slug: menu réactif
Versions concernées:
ID CVE: En attente.
Score CVSS: 9,9 (critique)
Vecteur CVSS:CVSS: 3.1 / AV: N / AC: L / PR: L / UI: N / S: C / C: H / I: H / A: H
Version entièrement corrigée: 4.0.4

Responsive Menu est un plugin conçu pour créer des menus hautement réactifs et personnalisables pour les sites WordPress. Il contient plusieurs fonctionnalités qui permettent aux utilisateurs de créer facilement une belle interface de menu avec différentes couleurs et conceptions. Dans le cadre des fonctionnalités du plugin, les propriétaires de sites ont la possibilité d’importer des thèmes à partir de fichiers zip qui peuvent être créés par des créations personnalisées ou téléchargés à partir du site Responsive Menu. Afin de fournir cette fonctionnalité, le plugin a enregistré une action admin_post, admin_post_rmp_upload_theme_file, lié à la fonction rmp_upload_theme.

 add_action('admin_post_rmp_upload_theme_file', array( $this, 'rmp_upload_theme' ) );

La rmp_upload_theme prend un fichier zip fourni par le admin_post demande et extrait son contenu au /rmp-menu/themes/ annuaire.

    public function rmp_upload_theme() {
		status_header(200);
		$theme = $_FILES['file']['tmp_name'];
		WP_Filesystem();
		$upload_dir = wp_upload_dir()['basedir'] . '/rmp-menu/themes/';
		$unzip_file = unzip_file( $theme , $upload_dir );
		if ( is_wp_error( $unzip_file ) ) {
			$status = ['danger' => $unzip_file->get_error_message() ];
		} else {
			$status = [ 'success' => 'Theme Imported Successfully.'];
		}
		return $status;
	}

Malheureusement, il n’y avait pas de vérification de capacité sur cette fonction, et en raison du fait qu’elle utilisait admin_post, tout utilisateur connecté à un site WordPress vulnérable pouvait exécuter cette action pour déclencher le téléchargement du fichier et l’extraction du zip. Cela incluait les abonnés et autres utilisateurs de bas niveau, rendant les sites avec enregistrement ouvert particulièrement vulnérables. La admin_post l’action ne vérifie pas si un utilisateur est un administrateur, mais plutôt si l’utilisateur envoie une demande à la page d’administration /wp-admin/admin-post.php tout en étant authentifié.

Un abonné pourrait télécharger des archives zip contenant des fichiers PHP malveillants qui seraient extraits /rmp-menu/themes/ annuaire. Ces fichiers pourraient ensuite être accédés via le front-end du site pour déclencher l’exécution de code à distance et finalement permettre à un attaquant d’exécuter des commandes pour infecter davantage un site WordPress.

De plus, il n’y avait pas de vérification nonce sur cette fonction, ce qui la rend également vulnérable aux tentatives de falsification de requêtes intersites.

Cette fonctionnalité a été introduite dans la version 4.0.0 du plugin, par conséquent, seuls les sites exécutant les versions 4.0.0 – 4.0.3 de ce plugin sont considérés comme vulnérables.

La description: Falsification de demande intersite vers téléchargement de fichier arbitraire
Plugin concerné: Menu réactif
Plugin Slug: menu réactif
Versions concernées:
ID CVE: En attente.
Score CVSS: 8,8 (élevé)
Vecteur CVSS: CVSS: 3.1 / AV: N / AC: L / PR: N / UI: R / S: U / C: H / I: H / A: H
Version entièrement corrigée: 4.0.4

Avant la refonte majeure du plugin dans la version 4.0.0, la fonction d’importation de thème était intégrée dans la zone des paramètres au lieu d’utiliser la fonctionnalité autonome. Le plugin a reçu une requête POST avec le responsive-menu-import-theme le contenu du paramètre et du fichier dans responsive-menu-import-theme-file paramètre sur la page du menu réactif.

              elseif(isset($_POST['responsive-menu-import-theme'])):
                    $file = $_FILES['responsive-menu-import-theme-file'];
                    $theme = isset($file['tmp_name']) && $file['tmp_name'] ? $file['tmp_name'] : null;

                    echo $controller->import_theme($theme);

Si la responsive-menu-import-theme a été envoyé dans une requête, il a déclenché le import_theme fonction pour démarrer une importation de thème. Cela impliquait le téléchargement et l’extraction des fichiers de l’archive zip fournie vers le /responsive-menu-themes dossier.

    public function import_theme($theme) {
        if($theme):
            WP_Filesystem();
            $upload_folder = wp_upload_dir()['basedir'] . '/responsive-menu-themes';

            $unzipfile = unzip_file($theme, $upload_folder);

            if(is_wp_error($unzipfile)) {
                $alert = ['danger' => $unzipfile->get_error_message()];
            } else {
                $alert = ['success' => 'Responsive Menu Theme Imported Successfully.'];
            }

Bien qu’il y ait eu une vérification d’autorisation sur cette fonctionnalité qui a permis que seuls les administrateurs puissent déclencher une importation de thème, il n’y avait pas de vérifications nonce pour vérifier qu’une demande provenait d’une session d’administrateur actuellement authentifié. Cela signifiait que les attaquants pouvaient créer une requête et inciter un administrateur à télécharger une archive zip contenant des fichiers PHP malveillants. L’attaquant pourrait alors accéder à ces fichiers pour réaliser l’exécution de code à distance et infecter davantage le site ciblé.

Étant donné que ce plugin a subi une refonte majeure, cela est considéré comme une fonctionnalité héritée. Seuls les sites exécutant des versions antérieures à 4.0.0 ou exécutant en mode hérité sur les versions 4.0.0 à 4.0.3 sont considérés comme vulnérables.

La description: Falsification de demande intersite pour la modification des paramètres
Plugin concerné: Menu réactif
Plugin Slug: menu réactif
Versions concernées: <= 4.0.3
ID CVE: En attente.
Score CVSS: 5,4 (moyen)
Vecteur CVSS: CVSS: 3.1 / AV: N / AC: L / PR: N / UI: R / S: U / C: N / I: L / A: L
Version entièrement corrigée: 4.0.4

En plus de la fonctionnalité d’importation de thème, le plugin contenait la possibilité d’importer de nouveaux paramètres. Le plugin recherche une requête POST avec le responsive-menu-import le contenu des paramètres et des fichiers dans responsive-menu-import-file paramètre sur la page du menu réactif.

            elseif(isset($_POST['responsive-menu-import'])):
                    $file = $_FILES['responsive-menu-import-file'];
                    $file_options = isset($file['tmp_name']) ? (array) json_decode(file_get_contents($file['tmp_name'])) : null;
                    echo $controller->import($file_options);

Si la responsive-menu-import-file a été envoyé dans une requête, cela déclencherait la fonction d’importation pour démarrer une importation de paramètres. Cela déclencherait alors le updateOptions pour mettre à jour l’une des options définies pour le plugin stocké dans le responsive_menu table.

   public function import($imported_options) {
        $errors = [];
        if(!empty($imported_options)):

            $validator = new Validator();
            if($validator->validate($imported_options)):
                try {
                    unset($imported_options['button_click_trigger']);
                    $options = $this->manager->updateOptions($imported_options);
                    $task = new UpdateOptionsTask;
                    $task->run($options, $this->view);
                    $alert = ['success' => 'Responsive Menu Options Imported Successfully.'];

Encore une fois, bien qu’il y ait eu une vérification d’autorisation sur cette fonctionnalité limitant l’importation des paramètres aux administrateurs, aucune vérification nonce n’a été effectuée pour vérifier qu’une demande provenait de la session d’un administrateur actuellement authentifié. Cela signifiait que les attaquants pouvaient élaborer une requête et inciter un administrateur à importer tous les nouveaux paramètres. Ces paramètres pourraient être modifiés pour inclure du JavaScript malveillant, permettant ainsi à un attaquant d’injecter des charges utiles qui pourraient contribuer à une infection ultérieure du site.

Étant donné que ce plugin a subi une refonte majeure, cela est considéré comme une fonctionnalité héritée. Seuls les sites exécutant des versions antérieures à 4.0.0 ou exécutant en mode hérité sur les versions 4.0.0 à 4.0.3 sont considérés comme vulnérables.

Calendrier de divulgation

  • 17 décembre 2020 – Conclusion de l’analyse du plugin qui a conduit à la découverte des trois vulnérabilités. Nous développons des règles de pare-feu pour protéger les clients Wordfence et les diffusons aux utilisateurs de Wordfence Premium. Nous effectuons notre première tentative de contact via le formulaire de contact ExpressTech.io.
  • 4 janvier 2021 – Nous effectuons une seconde tentative de contact, cette fois via le formulaire de contact sur le site Responsive Menu.
  • 10 janvier 2021 – Nous signalons le problème à l’équipe des plugins WordPress et fournissons tous les détails au moment du rapport.
  • 11 janvier 2021 – Nous recevons une réponse de l’équipe des plugins WordPress et du fondateur de Responsive Menu. Ils vérifient qu’ils commenceront à travailler sur un correctif.
  • 15 janvier 2021 – Responsive Menu nous fournit une copie du patch à tester. Nous vérifions que cela est suffisant et demandons l’ajout d’améliorations de sécurité supplémentaires.
  • 16 janvier 2021 – Les utilisateurs gratuits de Wordfence reçoivent des règles de pare-feu.
  • 18 janvier 2021 – Une version corrigée du plugin est publiée en tant que version 4.0.4. Nous vérifions à nouveau que les vulnérabilités ont été corrigées.

Conclusion

Dans l’article d’aujourd’hui, nous avons détaillé trois failles dans le plugin Responsive Menu qui permettaient aux attaquants de réaliser l’exécution de code à distance via des téléchargements de fichiers arbitraires et de modifier les paramètres. Ces failles ont été entièrement corrigées dans la version 4.0.4. Nous recommandons aux utilisateurs de mettre immédiatement à jour vers la dernière version disponible, qui est la version 4.0.4 au moment de cette publication.

Wordfence Premium les utilisateurs ont reçu des règles de pare-feu protégeant contre cette vulnérabilité le 17 décembre 2020, tandis que ceux qui utilisent encore la version gratuite de Wordfence ont reçu la même protection le 16 janvier 2021.

Si vous connaissez un ami ou un collègue qui utilise ce plugin sur son site, nous vous recommandons vivement de lui transmettre cet avis pour aider à garder ses sites protégés car ils sont considérés comme des problèmes de gravité critiques pouvant entraîner l’exécution de code à distance.

Remarque: Nous avons demandé au propriétaire du plugin d’ajouter un renforcement de la sécurité à l’importation de fichiers zip. Bien que nous ayons reçu la confirmation du propriétaire du plugin qu’il travaillerait à sa mise en œuvre, cela fait près d’un mois sans progrès visible sur cette demande. Compte tenu de la gravité des vulnérabilités déjà corrigées, nous publions cet avis maintenant afin que les propriétaires de sites puissent mettre à jour et protéger leurs sites. Nous considérons que le problème restant a un impact nettement plus faible, car il n’affecterait que de très rares installations WordPress. Nous prévoyons qu’ils résoudront bientôt ce problème, et nous mettrons à jour ce message une fois terminé.


Source link