Comment auditer un site WordPress avec WPScan ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons voir comment réaliser un audit de sécurité sur un site WordPress à l'aide de l'outil WPScan, afin d'identifier les failles de sécurité, mais aussi les défauts de configuration.
Afin de réaliser un audit de sécurité d'un site Web, il existe divers outils de sécurité : Nikto, Wapiti, WPScan, etc... Aujourd'hui, nous allons nous intéresser à WPScan, un outil spécifique dédié à l'analyse de sites WordPress.
WordPress étant un CMS utilisé par des millions de sites, il attire forcément le regard des pirates informatiques qui vont chercher à trouver des vulnérabilités au sein du CMS en lui-même, mais aussi dans les extensions et thèmes populaires.
WPScan peut être utile pour auditer son propre site afin d'identifier d'éventuelles faiblesses connues, avant que quelqu'un le fasse avant vous. Cet outil est intéressant en complément des opérations de maintenance effectuées régulièrement, notamment pour maintenir à jour les différents éléments (WordPress, les thèmes et les plugins).
Par ailleurs, WPScan peut-être utilisée dans le cadre de prestation d'audit afin d'analyser le site d'un client. Je ne vais pas vous le cacher et vous l'avez surement deviné, ce type d'outil peut aussi être utilisé à des fins malveillantes.
Attention : n'utilisez pas ce genre d'outil sur des sites web qui ne vous appartiennent pas, à moins d'avoir eu le consentement du propriétaire au préalable.
II. Les fonctionnalités de WPScan
WPScan intègre différentes fonctionnalités que l'on va pouvoir activer ou non en fonction des paramètres utilisés au moment d'exécuter l'outil. Voici quelques-unes des fonctionnalités de WPScan :
- Récupération du Header HTTP
- Détection de la possibilité de s'inscrire ou non sur le site
- Détection de la version de WordPress
- Analyse du fichier d'exploration robots.txt
- Récupération d'informations sur le thème, notamment le nom
- Récupération d'informations sur les extensions
- Identification de vulnérabilités au sein des extensions détectées
- Détection de fichiers de configuration de sauvegarde
- Etc.
Certaines fonctionnalités sont soumises à l'utilisation de l'API WPScan. Les requêtes à destination de cette API sont limitées dans la version gratuite : 25 requêtes par jour sur l'API, tout en sachant qu'une analyse d'un site nécessite généralement plusieurs appels vers l'API WPScan. En fonction des besoins et du nombre d'analyses à effectuer, il faudra peut-être songer à prendre un abonnement payant.
Avant d'aller plus loin, sachez que WPScan est développé en Ruby et que c'est un projet soutenu par Automattic, l'entreprise propriétaire de WordPress.
III. Installation de WPScan
Pour suivre ce tutoriel, vous avez besoin d'une machine avec Kali Linux puisque WPScan est préinstallé sur cette distribution Linux orientée sécurité.
Pour l'installer sur une autre distribution Linux, je vous invite à vous référer au GitHub du projet : WPScan - GitHub.
Si vous envisagez d'utiliser l'API WPScan (même en version gratuite), vous devez créer un compte sur leur site officiel : WPScan. La création d'un compte ne nécessite pas d'enregistrer une carte bancaire, ce qui est une bonne nouvelle.
IV. Utilisation de WPScan
Sur Kali Linux, l'outil WPScan est un binaire disponible dans "/usr/bin" alors il suffira de l'appeler par son petit nom dans un terminal Linux. Pour afficher l'aide complète de WPScan, la commande suivante doit être utilisée :
wpscan --hh
À partir de là, toutes les options seront affichées à l'écran. Voyons quelques exemples d'utilisation de WPScan.
La première à chose à savoir, c'est qu'il faut inclure le paramètre "--url" pour spécifier le nom de domaine du site à analyser.
wpscan --url www.domaine.fr
Sans aucun autre paramètre, WPScan va effectuer une analyse rapide du site et retourner quelques éléments : header HTTP, contenu du fichier robots.txt, état de la fonction d'inscription du site, détection de la version de WordPress, identification de certains plugins, etc.
Ensuite, il y a une option qui est particulièrement intéressante, c'est l'option "--enumerate" (ou "-e") puisqu'elle permet de spécifier ce qu'il faut analyser (dans le cas d'une analyse ciblée). Par exemple, la valeur "vp" permet de détecter les plugins vulnérables, tandis que la valeur "vt" recherchera la présence d'un thème vulnérable. On peut préciser plusieurs valeurs (mais certaines sont incompatibles entre elles ; voir l'aide), comme ceci :
wpscan --url www.domaine.fr --enumerate vp,vt
Pour que le résultat de cette commande soit complet et pertinent, il faut que l'on utilise l'API de WPScan. En effet, les informations liées aux vulnérabilités sont obtenues après sollicitation de l'API. Sans cela, WPScan va analyser le site distant, récupérer le maximum d'information au sujet des plugins et thèmes, mais il ne vous donnera pas d'informations sur les vulnérabilités détectées.
À partir de votre compte WPScan, vous devez récupérer votre "API Token" afin de l'utiliser avec votre instance WPScan.
Comment préciser le token de l'API au sein de la commande WPScan ? Pour cela, il y a deux possibilités : soit dans la commande directement via le paramètre "--api-token" suivi de la valeur, ou dans un fichier de configuration. La première option me semble préférable dans le cas de l'utilisation gratuite pour gérer au mieux ses 25 requêtes quotidiennes.
Ainsi, dans une requête cela donne :
wpscan --url www.domaine.fr --enumerate vp,vt --api-token VotreJetonAPI
Si vous souhaitez stocker ce jeton d'API dans un fichier de configuration pour ne pas avoir à le préciser à chaque fois, créez ce fichier :
nano ~/.wpscan/scan.yml
Précisez le contenu suivant (en modifiant le jeton) :
cli_options: api_token: VotreJetonAPI
Il suffit ensuite d'enregistrer le fichier. Si vous ne précisez pas de jeton d'API en utilisant WPScan, celui-ci sera utilisé systématiquement, sinon si vous précisez un jeton dans la ligne de commande, il sera utilisé à la place de celui dans le fichier de configuration. C'est bon à savoir.
Suite à l'analyse effectuée, vous pouvez voir s'il y a des vulnérabilités ou non au sein des plugins détectés sur le site. Néanmoins, il se peut que certains plugins ne soient pas détectés. Voici un exemple :
Sur la copie d'écran ci-dessus, on peut voir le plugin "NextScripts: Social Networks Auto-Poster". En recherchant sur le site de WordPress, on peut voir qu'il s'agit d'une extension qui permet de publier les nouveaux articles automatiquement sur les réseaux sociaux. C'est également précisé qu'il y a 6 vulnérabilités détectées, avec à chaque fois des informations.
Néanmoins, il faut prêter attention à une ligne en particulier : "The version could not be determined". Cela signifie que WPScan a détecté le plugin mais qu'il n'a pas pu récupérer la version installée. En fait, les vulnérabilités listées sont celles connues pour ce plugin, mais cela ne veut pas dire que le site analysé est vulnérable : tout dépend de la version installée.
À la fin de chaque analyse, plusieurs statistiques sont indiquées, notamment l'état de l'API. Sur l'exemple ci-dessous, on peut voir que cette analyse a consommé 8 requêtes d'API, et qu'il m'en reste 17 à consommer.
Par défaut, le mode de détection est défini sur "mixed", cela signifie qu'en fonction des éléments à détecter, le scan sera plus ou moins agressif (et donc visible). Pour passer en mode agressif (ou tout en mode passif ; "passive"), on peut utiliser l'option "--detection-mode" :
wpscan --url www.domaine.fr --detection-mode aggressive
Terminons l'utilisation de WPScan en prenant un exemple : l'énumération des utilisateurs WordPress.
L'outil WPScan permet d'énumérer les utilisateurs existants sur un site WordPress, et il faut savoir que par défaut WordPress autorise l'énumération des utilisateurs. Pour énumérer les utilisateurs, il y a plusieurs possibilités : à partir des permaliens via les pages auteur, à partir de l'API REST de WordPress (active par défaut) ou encore du flux RSS. Les comptes associés au flux RSS et aux pages liées aux auteurs sont visibles un peu par tout le monde de par leur visibilité sur les articles d'un site. Par contre, l'API REST de WordPress peut-être très bavarde si elle n'est pas bloquée et réellement donner une liste de comptes, ce qui est dangereux.
Cette énumération des utilisateurs s'effectue seulement avec la valeur "u" de l'option "--enumerate", comme ceci :
wpscan --url www.domaine.fr --enumerate u
Grâce à ces quelques exemples, vous avez connaissance des options basiques de WPScan. Libre à vous d'explorer l'aide pour aller plus loin dans l'utilisation de cet outil.
V. Conclusion
Une analyse de votre propre site web WordPress avec l'outil WPScan va peut-être vous faire prendre connaissance de certains défauts de configuration.
En complément d'un bon suivi des mises à jour, vous devez mettre en place des mécanismes de protection sur votre site WordPress. Certains plugins de sécurité permettent de vous guider en ce sens, notamment pour masquer des informations sensibles, désactiver l'accès à l'API REST, etc. Pour gérer spécifiquement l'accès à l'API REST, il y a le plugin "Disable JSON API" qui permet une gestion avancée.
Dernièrement, j'ai publié deux articles qui peuvent vous aider à renforcer la sécurité de votre site WordPress :
- Protéger son site WordPress avec CrowdSec
- Mettre en place l'authentification multifacteurs sur WordPress
Si vous avez une question liée à la sécurité de WordPress, n'hésitez pas à laisser un commentaire sur cet article.