Les sites WordPress sont régulièrement piratés, car il s’agit de loin du logiciel le plus populaire pour la création de sites web et de blogs. Cette popularité, associée à la nature de son architecture personnalisable, en fait une cible privilégiée pour les attaquants. Sa configuration par défaut contient plusieurs insécurités, tandis que des failles de sécurité sont régulièrement découvertes dans les plugins et les thèmes développés par les utilisateurs, ainsi que dans le « noyau » de WordPress lui-même.
Au lieu de simplement fournir une liste de conseils sur la façon de sécuriser WordPress, cet article montrera des exemples concrets de la façon dont les pirates (et les pentesters comme nous ici à Vumetric) exploitent ces faiblesses pour compromettre les sites WordPress – et comment prévenir de telles attaques.
Attaque n° 1 : forcer l’ouverture de session
Celle-ci est la plus évidente. Par défaut, la page de connexion de WordPress est accessible à l’ensemble de l’internet, est facile à trouver (il suffit d’aller sur /wp-login.php) et ne comporte pas de mesures d’atténuation de la force brute telles qu’un CAPTCHA ou une limitation du taux. Cela en fait une cible de choix pour les pirates informatiques et les robots :

Augmenter les chances : énumération des utilisateurs
Il y a plusieurs façons pour les attaquants d’augmenter leurs chances de pénétrer dans WordPress par force brute, la première étant l’énumération des utilisateurs par l’une des méthodes suivantes :
- Trouver des noms d’utilisateur valides en regardant les auteurs des messages et des commentaires.
- Utilisation de l’essai-erreur sur la page de connexion en vérifiant les messages d’erreur (y a-t-il une erreur indiquant que l’utilisateur n’existe pas, ou que le mot de passe fourni n’est pas valide ?)
- Utilisation du point de terminaison « /wp-json/wp/v2/users » de l’API JSON de WordPress pour obtenir une liste d’informations sur les utilisateurs valides.
- Récupération des noms d’utilisateur à partir de points d’extrémité intégrés et de fonctions telles que les flux RSS.
- Outils permettant d’automatiser les opérations ci-dessus (tels que WPScan).
Grâce à cette connaissance, les pirates peuvent cibler uniquement les comptes d’utilisateurs légitimes, ce qui rend leur attaque à la fois plus rapide et plus susceptible de réussir. Voici un exemple d’utilisation de l’API utilisateurs pour recueillir des informations en vue d’une attaque :

Ci-dessus, nous voyons que « bjoel » est un nom d’utilisateur valide pour le site. Parfois, ce point de terminaison comprendra également des adresses électroniques qu’un attaquant astucieux pourrait vérifier par rapport à des incidents de données connus afin de réaliser des attaques de bourrage d’informations d’identification ou d’hameçonnage avec. En cas d’échec, une attaque par force brute plus robuste peut être lancée.
Augmenter les chances : accélérer l’attaque
Cela nous amène à la deuxième façon dont les pirates augmentent leurs chances de réussite : le fichier xmlrpc.php .
En bref, xmlrpc est un précurseur de l’API WordPress qui permet d’interagir à distance avec WordPress via des requêtes au format XML. L’une des caractéristiques de xmlrpc est qu’il est possible d’effectuer plusieurs opérations en une seule demande, dans un souci d’efficacité. Toutefois, cela signifie qu’un attaquant peut soumettre plusieurs tentatives de connexion en une seule demande, ce qui accélère considérablement son attaque.
Comparons deux attaques par force brute, la première utilisant la méthode traditionnelle d’une tentative par requête via le formulaire de connexion :

En utilisant un réglage assez agressif de 10 threads, il est possible d’essayer environ 1500 mots de passe en deux minutes. Comparons maintenant avec une attaque accélérée utilisant xmlrpc pour soumettre plusieurs tentatives d’authentification dans chaque requête :

Lorsqu’elle est disponible, la prise en charge des appels multiples par xmlrpc.php permet de réaliser la même attaque par force brute en sept secondes au lieu de deux minutes. C’est parce qu’il soumet 500 tentatives de connexion à chaque demande. Ce type de gain de performance crée une attaque par force brute optimisée qui a plus de chances de réussir qu’une attaque traditionnelle dans les mêmes délais.
La prévention
Empêcher l’énumération des utilisateurs est difficile avec WordPress, mais les étapes suivantes peuvent aider :
- Définissez un nom d’affichage (pseudonyme) distinct de votre nom d’utilisateur. Cela apparaîtra dans des endroits tels que les articles et les commentaires sans révéler le nom d’utilisateur que vous utilisez pour vous connecter à WordPress.
- Restreindre l’accès à l’API JSON de WordPress, en particulier le point de terminaison « /wp-json/wp/v2/users « *.
- Débarrassez-vous de l’utilisateur « admin » par défaut au profit de votre propre compte.
À partir de là, les attaques par force brute peuvent être atténuées en procédant comme suit :
- Restreindre l’accès à xmlrpc.php*.
- Activer l’authentification à deux facteurs.
- Restreindre l’accès à la page de connexion à un nombre limité d’adresses IP.
En outre, il existe plusieurs plugins de sécurité pour WordPress qui effectuent certaines des opérations ci-dessus tout en ajoutant des protections supplémentaires par force brute (nous y reviendrons).
*
A noter :
Ces fonctionnalités peuvent être nécessaires pour que certains plugins et intégrations fonctionnent ; cependant, en règle générale, elles ne sont pas nécessaires pour les sites de base. Il existe plusieurs façons de restreindre l’accès – la plus simple étant une règle de refus .htaccess – mais d’autres options existent pour limiter l’accès aux utilisateurs authentifiés ou à d’autres conditions spécifiques. Nous vous recommandons de rechercher ce qui convient le mieux à votre cas d’utilisation.
Attaque n°2 : Exploitation d’un code vulnérable
Si un pirate n’est pas en mesure de trouver des informations d’identification légitimes pour se connecter à votre site, il peut chercher à exploiter les vulnérabilités qui existent dans les plugins, les thèmes ou le cœur de WordPress. En raison de sa popularité et de sa facilité de personnalisation, l’écosystème WordPress a toujours été l’un des plus ciblés et exploités, avec plus de 1 250 entrées présentes sur ExploitDB au moment de la rédaction de ce document.
Voyons comment l’un de ces exploits peut être utilisé par les pirates.
Exemple d’exploit : Plugin Mail Masta
Le plugin WordPress « Mail Masta » version 1.0 est vulnérable à l’inclusion de fichier local (LFI). Une LFI permet à un attaquant de lire des fichiers arbitraires sur l’hôte vulnérable, y compris des éléments tels que le fichier de configuration de WordPress en utilisant une simple requête web :

En utilisant cette vulnérabilité, nous voyons le nom d’utilisateur et le mot de passe de la base de données pour l’instance WordPress associée. Ces informations pourraient être utilisées pour se connecter directement au panneau d’administration de WordPress (si « elyana » réutilise son mot de passe). Il pourrait également être utilisé pour accéder à la base de données directement ou avec quelque chose comme phpMyAdmin afin d’ajouter un nouvel utilisateur administrateur ou de craquer/changer le mot de passe des utilisateurs existants.
Prévenir l’attaque
La prévention est assez simple :
- Mettez régulièrement à jour votre installation WordPress (noyau, plugins et thèmes). La mise en place d’un événement répétitif dans le calendrier en guise de rappel peut permettre d’éviter de passer à travers les mailles du filet.
- Réduire au minimum l’utilisation de codes tiers lorsque cela est possible, par exemple. des thèmes et des plugins.
- N’utilisez que du code tiers provenant de sources fiables et de projets actifs et bien entretenus.
- Effectuer un examen du code pour toutes les personnalisations apportées à votre site.
- S’inscrire à une liste de diffusion qui fournit des avis importants en matière de sécurité.
Attaque n° 3 : compromettre le système
Maintenant que notre attaquant a forcé ou exploité son chemin dans votre panneau d’administration WordPress, il est temps pour lui de compromettre le système sous-jacent par l’exécution de commandes. Il y a trois façons principales de procéder :
- Télécharger un plugin malveillant.
- Modifiez un fichier PHP (par exemple, un fichier faisant partie d’un thème).
- Trouver un moyen de télécharger un fichier PHP malveillant.
À titre d’exemple, nous nous concentrerons sur le numéro 2 car c’est l’un des plus faciles. Il suffit de se rendre dans Apparence -> Editor et de modifier le fichier 404.php du thème actif :

Nous ajoutons maintenant un peu de code PHP pour obtenir l’exécution de la commande :
…
if (!empty($_GET[‘cmd’])) { echo ‘<pre>’ ; echo shell_exec($_GET[‘cmd’]) ; echo ‘</pre>’ ; exit() ; } … |
Nous pouvons ensuite exécuter les commandes « whoami » et « ifconfig » sur le serveur en naviguant vers une URL inexistante et en fournissant un argument « cmd » :

À partir de là, il devient trivial de compromettre la base de données (en lisant le nom d’utilisateur et le mot de passe dans wp-config.php), d’obtenir un shell interactif sur le système sous-jacent et de lancer d’autres attaques. Si votre instance de WordPress est connectée au réseau de votre entreprise, elle peut servir de point d’appui pour compromettre d’autres systèmes.
Les autres méthodes permettent essentiellement de réaliser le même type de compromis par des moyens différents.
La prévention
Si un attaquant est arrivé jusqu’ici, il est généralement déjà trop tard. Il existe des solutions qui consistent à modifier les autorisations et les paramètres de configuration pour empêcher l’écriture de fichiers et à désactiver la prise en charge des plugins, mais cela n’est pas très pratique dans la plupart des cas si vous voulez que votre instance de WordPress reste utilisable.
Il peut être intéressant de désactiver les fonctions dangereuses via le fichier php.ini, par exemple :
- exécuter
- passer
- shell_exec
- système
- proc_open
- popen
- curl_exec
- curl_multi_exec
- parse_ini_file
- show_source
Toutefois, cela n’est pas toujours possible dans les environnements d’hébergement mutualisé et peut finir par interférer avec certains plugins et intégrations légitimes.
Plus de conseils pour sécuriser WordPress contre les pirates informatiques
En plus de ce qui a été dit, vous pouvez sécuriser votre instance WordPress en procédant comme suit :
- Assurez-vous que l’indexation des répertoires est désactivée. Cela se fait généralement dans la configuration du serveur web et peut être rapidement vérifié en allant sur « /wp-content/uploads/ » dans votre navigateur pour voir si vous obtenez une liste des fichiers téléchargés.
- Veillez à ne pas laisser de sauvegardes de fichiers dans la racine du site. Des sauvegardes lisibles de fichiers .php ou des vidages de bases de données peuvent conduire à une compromission par divulgation d’informations.
- Effectuez des sauvegardes régulières et stockez-les hors serveur en cas de compromission.
- Utilisez un pare-feu d’application Web (WAF) pour contrecarrer les attaques. Cela peut se faire par l’intermédiaire d’un fournisseur comme CloudFlare, mais le plugin WordPress Wordfence est spécifiquement conçu pour aider à renforcer votre système.
- Enregistrez-vous pour obtenir une clé API gratuite pour WPscan et utilisez-la pour scanner votre site à la recherche de vulnérabilités et de mauvaises configurations avec la commande suivante : wpscan -e vp,vt,cb,dbe,u,m –api-token YOUR_API_KEY –url http://YOUR_WORDPRESS_SITE
Résumé de la manière dont les sites WordPress sont piratés
Récapitulons :
- L’énumération des utilisateurs et les attaques par force brute peuvent permettre aux pirates d’accéder au panneau d’administration de WordPress.
- Un code vulnérable et obsolète peut permettre à des pirates de compromettre votre instance WordPress, même sans disposer d’informations d’identification valides ou sans pouvoir se connecter.
- Une instance WordPress piratée peut entraîner la compromission du système sous-jacent et des menaces supplémentaires.
Prenez les mesures nécessaires pour vous protéger de ces risques en utilisant les informations présentées dans ce billet. Si vous voulez vous assurer que votre site WordPress ou toute autre infrastructure informatique est sécurisée, contactez l’un de nos spécialistes certifiés pour obtenir l’avis d’un expert.