
Exploit en Python para CVE-2019-6340 dirigido a la API RESTful de Drupal 8 para lograr ejecución remota de código a través de solicitudes HTTP manipuladas. Incluye configuración de Docker y payload de inyección de comandos.
CVE 2019-6340
El sitio con el módulo RESTful API Services del núcleo de Drupal 8 habilitado permite al usuario enviar solicitudes GET, PATCH o POST al servidor.
(Una solicitud GET es suficiente para desencadenar la vulnerabilidad de ejecución de código incluso si el método PATCH está deshabilitado)
El sitio tiene cualquier otro módulo de servicios web habilitado, como JSON-API en Drupal 8 o REST services en Drupal 7.
REQUISITOS PARA EL 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
comando para ejecutar el exploit
python3 exp.py http://Ip_of_drupal_container:port_assigned(if)// "command_to_execuite"
ejemplo:- python3 exp.py http://127.0.0.1:8090/ "hostname -I"
ANÁLISIS DEL EXPLOIT
Guzzle es un cliente HTTP de PHP que facilita el envío de solicitudes HTTP y su integración con servicios web, y se utiliza como exploit para enviar solicitudes maliciosas a sitios web basados en Drupal. Si analizamos el script de Guzzle dentro del código del exploit (exp.py), podemos encontrar que una cadena "command" es reemplazada con el comando que pasamos en tiempo de ejecución (ej. hostname -I)

Cuando ejecutamos el comando del exploit, primero buscará un nodo existente, por lo que debemos crear algunos nodos en nuestro sitio web. Básicamente, hay que agregar algo de contenido en el sitio web.

No accederá dos veces al mismo nodo; supongamos que ha agregado 5 nodos, entonces después de ejecutar su exploit 5 veces tendrá que actualizar sus nodos. Simplemente vaya a contenido y aplique alguna acción a los nodos.
SOLICITUD Y RESPUESTA

