Le 5 avril 2023, l’équipe Wordfence Threat Intelligence a lancé le processus de divulgation responsable d’une vulnérabilité que nous avons découverte dans WP Data Access, un plugin WordPress installé sur plus de 10 000 sites. Cette faille permet à un attaquant authentifié de s’octroyer des privilèges administratifs via une mise à jour de profil, si le site ciblé a le paramètre ‘Role Management’ activé.

Clôture des mots Prime, Se soucieret Réponse les utilisateurs ont reçu une règle de pare-feu pour se protéger contre tout exploit ciblant cette vulnérabilité le 5 avril 2023. Les sites utilisant encore la version gratuite de Wordfence recevront la même protection le 5 mai 2023.

Nous avons effectué notre premier contact avec le développeur le 5 avril 2023, le jour même où nous avons découvert la vulnérabilité. Nous avons reçu une réponse le jour même et envoyé tous les détails. Le développeur a publié un correctif rapidement le lendemain, le 6 avril 2023.

Nous tenons à remercier tout particulièrement le développeur principal de WP Data Access, Peter Schulz, qui a fourni un exemple exemplaire de la manière dont les problèmes de sécurité doivent être traités en répondant immédiatement et en publiant un correctif le lendemain.

Nous vous recommandons fortement de vous assurer que votre site a été mis à jour vers la dernière version corrigée de WP Data Access, qui est la version 5.3.8 au moment de cette publication.


Résumé des vulnérabilités de Wordfence Intelligence

Le plugin WP Data Access pour WordPress est vulnérable à l’escalade de privilèges dans les versions jusqu’à 5.3.7 incluses. Cela est dû à un manque de contrôles d’autorisation sur le multiple_roles_update fonction. Cela permet aux attaquants authentifiés, avec des autorisations minimales telles qu’un abonné, de modifier leur rôle d’utilisateur en fournissant le ‘wpda_role[]‘ lors d’une mise à jour de profil. Cela nécessite que le paramètre « Activer la gestion des rôles » soit activé pour le site.


Analyse de vulnérabilité

WP Data Access est un plugin WordPress conçu pour rendre la création de tableaux de données dans WordPress plus intuitive et plus facile à gérer pour les propriétaires de sites. L’une des fonctionnalités du plug-in est la possibilité d’activer la gestion des rôles, ce qui permet à un propriétaire de site de créer des rôles personnalisés et d’attribuer plusieurs rôles à différents utilisateurs. Malheureusement, cette fonctionnalité a été implémentée de manière non sécurisée, ce qui a permis aux utilisateurs authentifiés de s’attribuer n’importe quel rôle, y compris le rôle administratif.

En regardant de plus près le code, nous voyons que le ‘multiple_roles_update‘ la fonction utilisée pour attribuer les nouveaux rôles d’un utilisateur lors de la mise à jour d’un profil est accrochée via  »profile_update ». Ce crochet est déclenché immédiatement après la mise à jour de tout profil utilisateur et il n’effectue aucune sorte de vérification d’autorisation sur l’utilisateur effectuant l’action. En tant que tel, cela signifie que toute mise à jour du profil d’un utilisateur, y compris sur la page profile.php, invoquera la fonction hookée ‘multiple_roles_update‘.

Cela permet à tous les utilisateurs authentifiés disposant d’un compte, tels que les abonnés, d’invoquer le ‘multiple_roles_update‘ fonction.

 $this->loader->add_action( 'profile_update', $wpda_roles, 'multiple_roles_update' );

Si la fonction associée avait un contrôle de capacité, cela aurait pu empêcher ces utilisateurs d’exécuter pleinement la fonction, mais ce n’était pas le cas. En examinant la fonction accrochée, nous voyons une vérification vérifiant que le paramètre de gestion des rôles est activé, mais rien de plus. La fonction détermine alors l’utilisateur et recherche le ‘wpda_role‘ paramètre de tableau d’une requête donnée. S’il est présent, il traitera les rôles fournis et ajoutera le rôle et les autorisations applicables à l’utilisateur récupéré lors de la première étape.

Cela a permis aux utilisateurs authentifiés, tels qu’un abonné, d’effectuer des mises à jour de profil pour fournir le ‘wpda_role‘ paramètre de tableau avec tous les rôles souhaités, tels que l’administrateur, lors d’une mise à jour de profil qui serait accordée immédiatement après l’enregistrement des mises à jour de profil.

public function multiple_roles_update( $user_id ) {
   if ( ! $this->is_role_management_enabled ) {
      return;
   }

   $wp_user = new \WP_User( $user_id );
   if ( isset( $wp_user->data->user_login ) ) {
      $user_login = $wp_user->data->user_login;
      // Get access to editable roles
      global $wp_roles;
      if ( isset( $_REQUEST['wpda_role'] ) && is_array( $_REQUEST['wpda_role'] ) ) {
         // Process roles
         $sanitized_roles = array();
         foreach ( $_REQUEST['wpda_role'] as $new_user_role ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
            $sanitized_new_user_role = sanitize_text_field( wp_unslash( $new_user_role ) ); // input var okay.
            $wp_user->add_role( $sanitized_new_user_role );
            $sanitized_roles[ $sanitized_new_user_role ] = true;
         }

         // Remove unselected roles
         foreach ( $wp_roles->roles as $role => $val ) {
            if ( ! isset( $sanitized_roles[ $role ] ) ) {
               $wp_user->remove_role( $role );
            }
         }
      } else {
         // BUG!!! REMOVED!!!
         // When plugin role management is enabled, this removes all user roles when a user updates his profile.
         // foreach ( $wp_roles->roles as $role => $val ) {
         // $wp_user->remove_role( $role );
         // }
      }
   }
}</pre>
<pre>

Comme pour toute vulnérabilité d’escalade de privilèges, cela peut être utilisé pour compromettre complètement le site. Une fois qu’un attaquant a obtenu un accès utilisateur administratif à un site WordPress, il peut alors manipuler n’importe quoi sur le site ciblé comme le ferait un administrateur normal. Cela inclut la possibilité de télécharger des fichiers de plug-in et de thème, qui peuvent être des fichiers zip malveillants contenant des portes dérobées, et de modifier des publications et des pages qui peuvent être exploitées pour rediriger les utilisateurs du site vers d’autres sites malveillants.

Calendrier de divulgation

5 avril 2023 – Découverte de la vulnérabilité Privilege Escalation dans WP Data Access. Clôture des mots Prime, Se soucieret Réponse les utilisateurs reçoivent une règle de pare-feu pour fournir une protection contre tout exploit susceptible de cibler cette vulnérabilité.
5 avril 2023 – Nous prenons contact avec le fournisseur du plugin en lui demandant de confirmer la boîte de réception pour gérer la discussion.
5 avril 2023 – Le fournisseur confirme la boîte de réception pour le traitement de la discussion.
5 avril 2023 – Nous envoyons les détails complets de la divulgation. Le fournisseur accuse réception du rapport et commence à travailler sur un correctif.
6 avril 2023 – Une version entièrement corrigée du plugin, 5.3.8, est publiée.
5 mai 2023 – Les utilisateurs gratuits de Wordfence reçoivent la règle de pare-feu.

Conclusion

Dans l’article d’aujourd’hui, nous avons détaillé une faille dans le plugin WP Data Access qui permettait aux attaquants authentifiés, avec au moins un accès au niveau de l’abonné à un site, d’élever leurs privilèges à ceux d’un administrateur de site, ce qui pourrait finalement conduire à une compromission complète du site. Cette faille a été entièrement corrigée dans la version 5.3.8.

Nous recommandons aux utilisateurs de WordPress de vérifier immédiatement que leur site a été mis à jour vers la dernière version corrigée disponible, qui est la version 5.3.8 au moment de cette publication.

Clôture des mots Prime, Se soucieret Réponse les utilisateurs ont reçu une règle de pare-feu pour se protéger contre tout exploit ciblant cette vulnérabilité le 5 avril 2023. Les sites utilisant encore la version gratuite de Wordfence recevront la même protection le 5 mai 2023.

Si vous connaissez un ami ou un collègue qui utilise ce plugin sur son site, nous vous recommandons fortement de lui transmettre cet avis pour aider à protéger ses sites, car il s’agit d’une vulnérabilité grave pouvant entraîner une prise de contrôle complète du site.

Si vous êtes chercheur en sécurité, vous pouvez divulguez-nous vos découvertes de manière responsable et obtenez un ID CVE et obtenez votre nom sur le Classement Wordfence Intelligence.


Source link