Plusieurs vulnérabilités découvertes dans Wordpress permettent une exécution de commande à distance

Date de publication :

L'équipe de recherche en cybersécurité de RIPS Technologies GmbH a publié le 19 février 2019 un bulletin dans lequel est révélée l’existence d’une nouvelle vulnérabilité Wordpress. Un attaquant pourrait l'exploiter afin d’exécuter des commandes à distance sur le serveur hébergeant l’application. Cette attaque serait peu complexe à mettre en œuvre, mais nécessite au moins un compte avec les privilèges « auteur ». L'impact estimé sur la confidentialité, la disponibilité et l'intégrité des données est élevé.

RIPS Technologies est une société qui réalise des audits de code et de l'intégration de tests automatisés de sécurité autour du développement.

Wordpress est un système de gestion de contenu (CMS) gratuit, libre et open-source qui est en écrit en PHP. L’application repose sur l’utilisation d’une base de données MySQL. Celle-ci permet notamment de créer et gérer différents sites Web (blogs, sites vitrines, vente en ligne, etc.).

L’exécution de commande à distance utilise plusieurs composants vulnérables qui sont l'édition d’images pour la rogner et la modification des métadonnées.

Un correctif a été publié et intégré au projet. Les versions portant ces correctifs sont la 4.9.9 et la 5.0.1. Du fait de la criticité de cette vulnérabilité, les utilisateurs sont invités à appliquer le correctif rapidement.

Détails techniques :

CVE-2019-6977 [CVSS v3 8.8] L’attaque nécessite un compte avec les privilèges « author » et consiste à combiner deux vulnérabilités : Path traversal et l’inclusion de fichier local. L'attaquant pourrait alors téléverser une image contenant du code PHP malveillant ce qui permettrait l'exécution de commandes à distance.

Lorsqu’une image est téléversée, celle-ci est tout d’abord stockée dans le dossier wp-content/uploads. Par la même occasion, une référence à cette image sera alors créée afin de garder des traces sur les métadonnées telles que son propriétaire, l’heure de son téléversement, etc. Les métadonnées sont stockées dans la table wp_postmeta, où elles sont associées à leurs ID. Ces métadonnées sont modifiables et la méta _wp_attached_file est celle qui permet de spécifier où chercher l’image associée à son ID.

De ce fait, un attaquant peut manipuler cette valeur afin de téléverser l’image dans le dossier wp-content/themes grâce à la fonction de rognage d’image wp_crop_image(). En effet, cette fonction va d’abord retrouver l’image à l’aide de la fameuse valeur indiquée dans _wp_attached_file. Si le nom du fichier est retrouvé dans le dossier wp_content/uploads/ , la résolution se terminera, par contre si ce fichier n’est pas présent, il y aura une résolution HTTP qui s’effectuera du type : https://victimeserver.fr/wp_content/uploads/image.jpg. Une fois la résolution effectuée, l’image sera alors rognée et sera enregistrée dans son nouveau format à l’aide de la méta _wp_attached_file et du préfixe « cropped- ».

Avec un exemple de payload comme le suivant, on peut donc contrôler le téléversement de l’image : evil.jpg?/../themes/evil.jpg. La résolution locale ne pourra pas se faire, mais celle en HTTP fonctionnera puisque tout ce qui est après « ? » est négligé. La requête sera interprétée de cette manière : https://victimeserver.fr/wp_content/uploads/evil.jpg. L'image sera alors retrouvée et pourra être rognée. Lors de l'enregistrement de l'image rognée, aucun assainissement n’est effectué sur le champ _wp_attached_file, celle-ci se retrouvera dans le dossier wp_content/themes.

L’attaquant devra alors créer un post avec un modèle personnalisé dans lequel il pourra spécifier le fichier de template qu’il voudra inclure. Au niveau du code, c’est la fonction PHP include() qui sera utilisée pour faire cette action. A partir de ce moment, il n’aura plus qu’à indiquer son fichier téléversé et il sera capable d’envoyer des commandes à distance au serveur hébergeant l’application.

Informations

La faille est activement exploitée :

Un correctif existe :

Une mesure de contournement existe :

Risques

Risques

  • Exécution de code à distance.

Criticité

  • Score CVSS : 8.8

Existence d’un code d’exploitation de la vulnérabilité

  • Aucun code d’exploitation n’est disponible mais la vulnérabilité est simple à exploiter.

Composants & versions vulnérables

  • Les versions antérieures à Wordpress 4.9.9 et 5.0.1.

CVE

  • CVE-2019-6977

Solutions ou recommandations

Mise en place de correctif de sécurité

  • Un correctif a été publié et intégré au projet. La mise en place de ces correctifs sont portées par les versions 4.9.9 et 5.0.1.

Solution de contournement

  • Aucune solution de contournement n'est proposée.