Le 7 janvier, notre équipe Threat Intelligence a découvert des vulnérabilités dans Réinitialisation de la base de données WP, un plugin WordPress installé sur plus de 80 000 sites Web. L’une de ces failles a permis à tout utilisateur non authentifié de réinitialiser n’importe quelle table de la base de données à l’état de configuration WordPress initial, tandis que l’autre faille a permis à tout utilisateur authentifié, même avec des autorisations minimales, la possibilité d’accorder des privilèges administratifs à son compte tout en supprimant tous d’autres utilisateurs de la table avec une simple demande.

Ces problèmes sont considérés comme des problèmes de sécurité critiques qui peuvent entraîner une réinitialisation complète du site et / ou une prise de contrôle. Nous vous recommandons vivement de mettre à jour la dernière version (3.15) immédiatement. Les utilisateurs de Wordfence Premium sont protégés contre ces vulnérabilités depuis le 8 janvier avec une règle de pare-feu personnalisée. Les utilisateurs gratuits de Wordfence bénéficieront de la même protection le 7 février.


WP Database Reset est un plugin de réinitialisation de base de données facile à utiliser qui offre aux utilisateurs la possibilité de réinitialiser toutes les tables de base de données sur leur site au même état qu’une nouvelle installation WordPress. C’est pratique pour les administrateurs qui effectuent des tests sur leur site Web et pour les administrateurs qui veulent recommencer sans avoir besoin d’une réinstallation complète de WordPress. Ce plugin fournit une fonctionnalité puissante qui, si elle n’est pas protégée, pourrait faire des ravages pour les propriétaires de sites. Malheureusement, c’est exactement ce que nous avons trouvé dans ce plugin.

Aucune des fonctions de réinitialisation de la base de données du plugin n’était protégée de manière sécurisée par des vérifications de capacité ou des nonces de sécurité. Sans contrôles de sécurité appropriés en place, le plugin WP Database Reset contenait une faille grave qui permettait à tout utilisateur non authentifié de réinitialiser n’importe quelle table de la base de données. Cette réinitialisation entraînerait une perte complète de la disponibilité des données. Un attaquant pourrait envoyer une simple demande et un site serait complètement réinitialisé aux valeurs par défaut standard de WordPress.

Version vulnérable du code du plugin:

  
 public function reset( array $tables ) {     
 	      if ( in_array('users', $tables ) ) {
 	        $this->reset_users = true;
 	      }
	 	
 	      $this->validate_selected( $tables );
 	      $this->set_backup();
 	      $this->reinstall();
 	      $this->restore_backup();
 	    }
	 	
 	    private function validate_selected( array $tables ) {
 	      if ( ! empty( $tables ) && is_array( $tables ) ) {
 	        $this->selected = array_flip( $tables );

Version révisée du code du plugin avec vérification de nonce de sécurité et vérification de capacité en place:

    public function reset(array $tables)
    {
      if (wp_verify_nonce(@$_REQUEST['submit_reset_form'], 'reset_nounce') && current_user_can('administrator')) {
         // Check if current user is Admin and check the nonce

        if (in_array('users', $tables)) {
          $this->reset_users = true;
        }

        $this->validate_selected($tables);
        $this->set_backup();
        $this->reinstall();
        $this->restore_backup();
      } else {
        throw new Exception(__('Please reload the page and try again. Double check your security code.', 'wordpress-database-reset'));
      }
    }

Une base de données WordPress stocke toutes les données qui composent le site, y compris les publications, les pages, les utilisateurs, les options du site, les commentaires, etc. En quelques clics simples et quelques secondes, un utilisateur non authentifié pourrait effacer une installation WordPress entière si cette installation utilisait une version vulnérable de ce plugin.


Pour aggraver encore la vulnérabilité précédente, tout utilisateur authentifié en tant qu’abonné et supérieur avait la possibilité de réinitialiser le wp_users table. Au départ, cela ne semble pas trop grave. La suppression de tous les utilisateurs lors d’une réinitialisation de la base de données peut être problématique, mais nous pouvons toujours recréer des utilisateurs, non? Malheureusement, c’était plus complexe. Chaque fois que le wp_users a été réinitialisée, elle a supprimé tous les utilisateurs de la table des utilisateurs, y compris tous les administrateurs, à l’exception de l’utilisateur actuellement connecté. L’utilisateur qui envoie la demande est automatiquement transmis à l’administrateur, même s’il n’est qu’un abonné. Cet utilisateur deviendrait également le seul administrateur, permettant ainsi à un attaquant de reprendre entièrement le site WordPress.

private function update_user_settings() {
 global $wpdb;

 $user_id = $this->reset_users? 1: $this->user->ID;

 $wpdb->query(
   $wpdb->prepare(
    "UPDATE $wpdb->users
     SET user_pass = '%s', user_activation_key = ''
     WHERE ID = '%d'",
     $this->user->user_pass, $user_id
   )
 );

 if ( $this->reset_users ) {
   wp_clear_auth_cookie();
   wp_set_auth_cookie( true );
 }
}

Un propriétaire de site autorisant un enregistrement ouvert sur un site avec une version vulnérable du plugin WP Database Reset pourrait perdre le contrôle de son site. Voici une démonstration du fonctionnement de cet exploit.

Rappel: sauvegardez votre site WordPress

Cette vulnérabilité nous rappelle que maintenance des sauvegardes de site est un élément extrêmement important pour maintenir la sécurité et la disponibilité de votre site. Certains compromis nécessitent nettoyage professionnel ou réponse aux incidents et enquête médico-légale. Sans sauvegardes, même une correction professionnelle ne serait pas utile après un compromis comme celui-ci. Les sauvegardes peuvent également améliorer le temps de récupération en cas de compromis. Nous recommandons aux propriétaires de sites:

  • Sauvegardez régulièrement par intervalles. Une fois par semaine serait un bon point de départ.
  • Sauvegarde à chaque fois qu’un changement majeur est effectué sur le site.
  • Stockez les sauvegardes sur un serveur ou un appareil séparé des installations WordPress. De cette façon, l’intégrité de votre sauvegarde peut être fiable dans le cas où le site ou son serveur est compromis.

Calendrier de divulgation

7 janvier 2020 – Vulnérabilité initialement découverte et analysée.
8 janvier 2020 – Tous les détails divulgués au développeur du plugin et une règle de pare-feu personnalisée publiée pour les utilisateurs premium de Wordfence.
13 janvier 2020 – Le développeur répond et nous informe qu’un correctif sera publié le lendemain.
14 janvier 2020 – Patch publié.
16 janvier 2020 – Divulgation publique.

Conclusion

Dans l’article d’aujourd’hui, nous avons détaillé deux vulnérabilités graves découvertes dans le plugin WP Database Reset. Ces failles sont corrigées dans la version 3.15. Si ce plugin est installé sur votre site, nous vous invitons à le mettre à jour immédiatement.

Sites en cours d’exécution Wordfence Premium sont protégés de toute attaque contre ces vulnérabilités depuis le 8 janvier. Les utilisateurs gratuits recevront la même protection le 7 février.


Source link

%d blogueurs aiment cette page :