Wordpress & Woocommerce · 3 min de lecture

Elementor 4.3.0 et 4.3.1 : une faille CSRF permettait de créer un administrateur avec un simple lien

Elementor 4.3.0 et 4.3.1 : une faille CSRF permettait de créer un administrateur avec un simple lien

Elementor 4.3.0, sortie le 22 septembre avec la nouvelle fonction Elementor MCP, embarquait aussi une faille de type CSRF notée 8,8 sur 10. Un administrateur connecté qui cliquait sur un lien piégé pouvait, sans le savoir, créer un second compte administrateur. Elementor a corrigé le problème en 4.3.2 le 24 septembre ; la version actuelle est la 4.3.4.

Qui est concerné

Seules les versions 4.3.0 et 4.3.1 sont touchées : les versions antérieures n’embarquent pas le module en cause. Le défaut se trouve dans le module Editor Events (core/common/modules/events-manager/), qui relaie la télémétrie de l’éditeur. Ce module dépend d’une expérimentation cachée, active par défaut sur les sites installés à partir d’Elementor 3.32.0. Elle n’apparaît pas dans l’écran Expérimentations : une installation standard récente est donc exposée, même si personne n’a touché aux réglages.

Comment fonctionnait le contournement

WordPress protège son API REST contre les requêtes forgées grâce à un nonce (wp_rest) quand l’utilisateur est authentifié par cookie. Elementor voulait exempter ses propres routes de télémétrie de ce contrôle et branchait un callback sur rest_authentication_errors, en priorité 0 :

add_filter( 'rest_authentication_errors', [ $this, 'bypass_nonce_check_for_own_routes' ], 0 );

Le test qui décidait si la requête visait une route Elementor cherchait simplement une chaîne dans l’URI brute :

return false !== strpos( $request_uri, self::API_NAMESPACE . '/' . self::API_BASE . '/' );

Patchstack relève trois erreurs combinées :

  • $_SERVER['REQUEST_URI'] contient la query string, que l’attaquant contrôle : il suffisait d’ajouter elementor/v1/events/ dans un paramètre ;
  • le filtre s’exécute avant la résolution de la route, il s’appliquait donc à toutes les routes REST du site, cœur et autres extensions compris ;
  • renvoyer true signale à WordPress que l’authentification est déjà validée, et rest_cookie_check_errors() saute alors la vérification du nonce.

Ajoutez le paramètre _method, que WordPress accepte pour remplacer le verbe HTTP, et un simple lien dans un e-mail ou un commentaire devient une requête POST vers /wp/v2/users avec le rôle administrateur. Les droits obtenus sont ceux de la victime : un administrateur qui clique, c’est un compte administrateur créé.

Le correctif lit la route résolue ($wp->query_vars['rest_route']) et exige que le namespace soit au début de la chaîne :

return 0 === strpos( $route, '/' . self::API_NAMESPACE . '/' . self::API_BASE . '/' );

Ce qu’il faut faire sur vos sites

Vérifiez la version installée et mettez à jour. Sur un parc géré avec WP-CLI :

wp plugin get elementor --field=version
wp plugin update elementor
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered

Si un site a tourné en 4.3.0 ou 4.3.1, contrôlez la liste des administrateurs et repérez tout compte créé entre le 22 septembre et votre mise à jour. Patchstack ne publie pas d’indicateurs de compromission pour cette faille ; la date de création des comptes reste le meilleur indice. Recherchez aussi dans les logs d’accès les requêtes vers d’autres routes REST qui contiennent elementor/v1/events/ en paramètre.

Le changelog d’Elementor mentionne pour la 4.3.2 une amélioration de la sécurité du code dans le traitement des données. Les versions suivantes, 4.3.3 et 4.3.4, ont renforcé le contrôle d’accès quand MCP est désactivé et corrigé plusieurs bugs liés à MCP.

La leçon pour les développeurs

Ce cas résume plusieurs erreurs classiques. Ne prenez jamais de décision de sécurité à partir de $_SERVER['REQUEST_URI']. Ancrez vos comparaisons de chaînes au début de la valeur. Et dans un filtre rest_authentication_errors, renvoyez $result tel quel, sauf si vous voulez vraiment déclarer l’utilisateur authentifié. Renvoyer true par commodité désactive une protection pour tout le site.

Ce qu’il faut retenir

  • Elementor 4.3.0 et 4.3.1 permettaient de contourner le nonce de l’API REST sur tout le site.
  • Un clic d’un administrateur connecté sur un lien piégé suffisait à créer un compte administrateur.
  • Mettez à jour vers 4.3.2 au minimum, idéalement la dernière version (4.3.4 au moment d’écrire).
  • Contrôlez les administrateurs créés depuis le 22 septembre sur les sites concernés.

Photo d’illustration : Book Catalog, Wikimedia Commons, CC BY 2.0.

  1. Cross-Site Request Forgery in Elementor Plugin Affecting 2 Million+ Sites – Patchstackpatchstack.com
  2. Elementor – WordPress.org Plugin Directory (changelog)wordpress.org

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Demander un devisÉcrire