La vulnérabilité Better Search Remplace WordPress affecte jusqu'à +1 million de sites

La vulnérabilité Better Search Remplace WordPress affecte jusqu'à +1 million de sites

24 janvier 2024

Une vulnérabilité de gravité critique a été découverte et corrigée dans le plugin Better Search Replace pour WordPress, qui compte plus d'un million d'installations de sites Web actives. Des attaques réussies pourraient conduire à des suppressions arbitraires de fichiers, à la récupération de données sensibles et à l’exécution de code.

Niveau de gravité de la vulnérabilité

La gravité des vulnérabilités est notée selon un système de points avec des notes décrites comme allant de faible à critique :

  • Faible 0,1-3,9
  • Moyen 4,0-6,9
  • Élevé 7,0-8,9
  • Critique 9.0-10.0

La gravité de la vulnérabilité découverte dans le plugin Better Search Replace est classée Critique, soit le niveau le plus élevé, avec un score de 9,8 sur l'échelle de gravité de 1 à 10.

Capture d'écran du score de gravité de 9,8 d'une vulnérabilité découverte dans le plugin Better Search Replace WordPress Illustration par Wordfence

Meilleure recherche Remplacer le plugin WordPress

Le plugin est développé par WP Engine mais il a été créé à l'origine par la société de développement Delicious Brains acquise par WP Engine. Better Search Replace est un outil WordPress peuplier qui simplifie et automatise le processus d'exécution d'une tâche de recherche et de remplacement sur une base de données de site Web WordPress, ce qui est utile dans une tâche de migration de site ou de serveur. Le plugin est disponible en version Pro gratuite et payante.

Le site Web du plugin répertorie les fonctionnalités suivantes de la version gratuite :

  • « Prise en charge de la sérialisation pour toutes les tables
  • La possibilité de sélectionner des tables spécifiques
  • La possibilité d'effectuer un « essai à sec » pour voir combien de champs seront mis à jour
  • Aucune exigence de serveur en dehors d'une installation en cours de WordPress
  • Prise en charge WordPress multisite »

La version Pro payante possède des fonctionnalités supplémentaires telles que la possibilité de suivre ce qui a été modifié, la possibilité de sauvegarder et d'importer la base de données pendant l'exécution du plugin et une prise en charge étendue.

La popularité du plugin est due à sa facilité d'utilisation, à son utilité et à sa réputation de plugin digne de confiance.

Vulnérabilité d'injection d'objet PHP

Une vulnérabilité d'injection d'objet PHP, dans le contexte de WordPress, se produit lorsqu'une entrée fournie par l'utilisateur n'est pas sérialisée de manière dangereuse. La désérialisation est un processus par lequel les représentations sous forme de chaîne d'objets sont reconverties en objets PHP.

L'ONG Open Worldwide Application Security Project (OWASP) propose une description générale de la vulnérabilité PHP Object Injection :

« L'injection d'objets PHP est une vulnérabilité au niveau de l'application qui pourrait permettre à un attaquant d'effectuer différents types d'attaques malveillantes, telles que l'injection de code, l'injection SQL, la traversée de chemin et le déni de service d'application, en fonction du contexte.

La vulnérabilité se produit lorsque les entrées fournies par l'utilisateur ne sont pas correctement nettoyées avant d'être transmises à la fonction PHP unserialize(). Étant donné que PHP autorise la sérialisation des objets, les attaquants pourraient transmettre des chaînes sérialisées ad hoc à un appel unserialize() vulnérable, ce qui entraînerait une injection arbitraire d'objets PHP dans la portée de l'application.

Afin d'exploiter avec succès une vulnérabilité d'injection d'objet PHP, deux conditions doivent être remplies :

  • L'application doit avoir une classe qui implémente une méthode magique PHP (telle que __wakeup ou __destruct) qui peut être utilisée pour mener des attaques malveillantes ou pour démarrer une « chaîne POP ».
  • Toutes les classes utilisées lors de l'attaque doivent être déclarées lorsque la fonction vulnérable unserialize() est appelée, sinon le chargement automatique des objets doit être pris en charge pour ces classes.

Si un attaquant peut télécharger (injecter) une entrée pour inclure un objet sérialisé de son choix, il peut potentiellement exécuter du code arbitraire ou compromettre la sécurité du site Web. Comme mentionné ci-dessus, ce type de vulnérabilité est généralement dû à une désinfection inadéquate des entrées utilisateur. La désinfection est un processus standard de vérification des données d'entrée afin que seuls les types d'entrée attendus soient autorisés et que les entrées dangereuses soient rejetées et bloquées.

Dans le cas du plugin Better Search Replace, la vulnérabilité a été exposée dans la manière dont il gérait la désérialisation lors des opérations de recherche et de remplacement. Une fonctionnalité de sécurité essentielle manquant dans ce scénario était une chaîne POP – une série de classes et de fonctions liées qu'un attaquant peut utiliser pour déclencher des actions malveillantes lorsqu'un objet n'est pas sérialisé.

Bien que le plugin Better Search Replace ne contienne pas une telle chaîne, le risque demeure que si un autre plugin ou thème installé sur le même site Web contenait une chaîne POP, il pourrait alors permettre à un attaquant de lancer des attaques.

Wordfence décrit la vulnérabilité :

«Le plugin Better Search Replace pour WordPress est vulnérable à l'injection d'objets PHP dans toutes les versions jusqu'à la 1.4.4 incluse via la désérialisation des entrées non fiables.
Cela permet à des attaquants non authentifiés d'injecter un objet PHP.

Aucune chaîne POP n'est présente dans le plugin vulnérable. Si une chaîne POP est présente via un plugin ou un thème supplémentaire installé sur le système cible, elle pourrait permettre à l'attaquant de supprimer des fichiers arbitraires, de récupérer des données sensibles ou d'exécuter du code.

En réponse à cette découverte, WP Engine a rapidement résolu le problème. L'entrée du changelog pour la mise à jour vers la version 1.4.5, publiée le 18 janvier 2024, met en évidence les mesures prises :

"Sécurité : la désérialisation d'un objet lors des opérations de recherche et de remplacement transmet désormais 'allowed_classes' => false pour éviter d'instancier l'objet et d'exécuter potentiellement du code malveillant stocké dans la base de données."

Cette mise à jour est intervenue après la divulgation responsable de la vulnérabilité par Wordfence le 18 décembre 2023, qui a été suivie par le développement et le test du correctif par WP Engine.

Que faire en réponse

Les utilisateurs du plugin Better Search Replace sont invités à mettre à jour immédiatement la dernière version pour protéger leurs sites Web contre les activités indésirables.