
Exploit Python pour CVE-2019-6340 ciblant l'API RESTful de Drupal 8 pour obtenir une exécution de code à distance via des requêtes HTTP forgées. Inclut une configuration Docker et un payload d'injection de commandes.
CVE 2019-6340
Le site avec le module Drupal 8 core RESTful API Services activé permet à l'utilisateur d'envoyer des requêtes GET, PATCH ou POST au serveur.
(Une requête GET suffit pour déclencher la vulnérabilité d'exécution de code même si la méthode PATCH est désactivée)
Le site a tout autre module de services web activé comme JSON-API dans Drupal 8 ou REST services dans Drupal 7.
CONFIGURATION REQUISE POUR LE POC
DOCKER.IO
DRUPAL 8.6.9
SQL 5.7
docker run -d --name mysqldb -e MYSQL_ROOT_PASSWORD=password mysql:5.7
docker run -d --name drupal --link mysqldb -p 8090:80 -e MY_SQL_USER:root -e MY_SQL_PASSWORD:password drupal:8.6.9
commande d'exécution de l'exploit
python3 exp.py http://Ip_of_drupal_container:port_assigned(if)// "command_to_execuite"
exemple :- python3 exp.py http://127.0.0.1:8090/ "hostname -I"
ANALYSE DE L'EXPLOIT
Guzzle est un client HTTP PHP qui facilite l'envoi de requêtes HTTP et s'intègre trivialement avec les services web. Il est utilisé ici comme vecteur pour envoyer une requête malveillante vers les sites basés sur Drupal. Si on analyse le script Guzzle à l'intérieur du code de l'exploit (exp.py), on constate qu'une chaîne "command" est remplacée par la commande que nous passons au moment de l'exécution (par exemple hostname -I)

Lorsque nous exécutons la commande de l'exploit, il commence par chercher un nœud existant. Nous devons donc créer quelques nœuds sur notre site, c'est-à-dire ajouter du contenu sur le site.

Il n'accédera jamais deux fois au même nœud. Si vous avez ajouté 5 nœuds, après avoir exécuté votre exploit 5 fois, vous devez mettre à jour vos nœuds. Allez simplement dans le contenu et appliquez une action quelconque sur les nœuds.
REQUÊTE ET RÉPONSE

