17 juillet 2018

WordPress : Correction d’une vulnérabilité permettant la suppression de fichiers sensibles

Contexte

La vulnérabilité “Arbitrary File Deletion” impactant les versions antérieures à WordPress 4.9.6 a été reportée le 20 novembre 2017 à l’équipe sécurité de WordPress sur HackerOne.

Cette vulnérabilité est exploitable à partir d’un compte utilisateur authentifié et permet de supprimer des fichiers sur le serveur. Toutefois, le compte utilisateur doit disposer d’un certain niveau de privilège lui permettant d’éditer, de supprimer des médias et des articles. Le rôle “auteur”, par exemple, entre dans cette catégorie. La suppression de certains fichiers peut permettre de briser les mécanismes de sécurité afin de compromettre le serveur.

Un exploit a été publié le 27 juin 2018 sur www.exploit-db.com. Les équipes de WordPress ont proposé une nouvelle version le 5 juillet 2018. Cette version, la 4.9.7, corrige cette faille de sécurité.


Explications techniques

WordPress utilise un système de jeton afin de sécuriser l’édition, la suppression des médias et des articles. Chaque jeton, appelé « wpnonce », est associé à une action (édition, suppression) et à l’identifiant en base de données d’un fichier. On retrouve, associé à cet identifiant, l’ensemble des données propres à ce fichier. Il s’agit de données telles que son nom, sa taille, ses dimensions, le chemin réel de sa miniature (« thumb » pour thumbnail) permettant d’accéder au fichier sur le serveur. Chaque « wpnonce » n’est utilisable qu’une seule fois et est généré de nouveau à chaque utilisation. Lors de l’édition avancée d’un média, il est possible de visualiser les valeurs du « wpnonce » pour chacune des actions.

En considérant le « wpnonce » d’édition, il est possible de forger une requête modifiant le chemin du « thumb » stocké en bases de données par le chemin d’un fichier que l’on souhaite supprimer sur le serveur.

Dans l’exemple ci-dessous, le fichier concerné sera le fichier de configuration « wp-config.php » :

Lors de la suppression du média, le navigateur effectue une simple requête en spécifiant l’action de suppression et le « wpnonce » associé à l’identifiant du fichier.

Le serveur WordPress va alors récupérer le chemin du « thumb » lié à l’identifiant en base de données et supprimer réellement le fichier localisé par ce chemin.

Il suffit alors de reconstruire la requête, comme montré ci-dessous, à partir du « wpnonce » trouvé dans le code source :

BSSI_WordPress_Vuln_2

 

La suppression de wp-config.php relance l’installation du serveur. À cette occasion, l’attaquant peut changer le serveur de bases de données vers lequel pointe le serveur WordPress par un serveur lui appartenant.

Si le serveur est vierge alors le hacker pourra redéfinir un compte administrateur et avoir la main sur le service WordPress. Avec le compte administrateur, il est possible de modifier le code PHP sur la machine qui héberge le serveur WordPress.

De ce fait, il est possible d’importer une invite de commande Web (Web Shell) permettant d’exécuter des commandes sur le serveur. Grâce à cela, le hacker peut décider d’importer un fichier exécutable lui offrant un Reverse Shell pour ensuite tenter des escalades de privilège par exemple.

 

Autre scénario d’attaques possibles

Un autre scénario serait que le pirate réalise une attaque de type CSRF en transmettant les requêtes forgées à un utilisateur afin de les lui faire exécuter.

Par ailleurs, cette vulnérabilité peut également être utilisée pour supprimer des fichiers tels que le « .htaccess » ou « index.php » à la racine du site. Cela offrirait de nouveaux vecteurs d’attaque en détruisant des mécanismes de sécurité mis en place.

Comment se protéger sur le long terme ?

Mettre à jour le serveur WordPress vers une version >= 4.9.7 si cela n’a pas été fait automatiquement. La version de WordPress est affichée en bas à droite de l’interface d’administration.

Par ailleurs, l’énumération d’utilisateur est possible sur la configuration initiale de WordPress. Cette configuration par défaut permet à un attaquant de lister l’ensemble des comptes puis de tenter des attaques ciblées par dictionnaire sur chaque compte. Si les utilisateurs utilisent des mots de passe faibles, leurs comptes risquent alors d’être compromis.

Cela permettrait finalement d’exploiter la vulnérabilité décrite dans cet article. C’est pourquoi il est important d’empêcher l’énumération et les attaques de type « Brute Force » afin de réduire les vecteurs d’attaque. Le plug-in “Stop User Enumeration” permet de faire cela.

Enfin une bonne pratique est de restreindre l’accès à l’interface d’administration par IP. Sans accès à celle-ci, l’exploitation de la vulnérabilité décrite dans cet article n’est pas possible.

Stanley Ragava

Stanley Ragava :
Consultant BSSI

Laisser un commentaire

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