
Exploit em Python para CVE-2019-6340 visando a API RESTful do Drupal 8 para obter execução remota de código por meio de requisições HTTP manipuladas. Inclui configuração Docker e payload de injeção de comandos.
CVE 2019-6340
The site as Drupal 8 core RESTful API Services module gets enabled and allows the user to send GET, PATCH or POST Request to the server.
(GET request is enough to trigger the code execution vulnerability even though PATCH method is disabled)
The site has any other web services module enabled like JSON-API in Drupal 8 or REST services in Drupal 7.
REQUISITOS PARA 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 de execução do exp
python3 exp.py http://Ip_of_drupal_container:port_assigned(if)// "command_to_execuite"
example:- python3 exp.py http://127.0.0.1:8090/ "hostname -I"
ANÁLISE DO EXP
Guzzle é um cliente HTTP PHP que facilita o envio de requisições HTTP e integração com web services, e é usado como um exploit para enviar requisições maliciosas para sites baseados em Drupal. Se analisarmos o script Guzzle dentro do código do exploit (exp.py), podemos descobrir que uma string "command" é substituída pelo comando que passamos em tempo de execução (ex: hostname -I)

Quando executamos o comando exp, primeiro ele irá procurar por um nó existente, então temos que criar alguns nós no nosso site, basicamente você tem que adicionar algum conteúdo no site.

Ele não acessará o mesmo nó duas vezes. Suponha que você adicionou 5 nós, então após executar seu exploit 5 vezes, você terá que atualizar seus nós. Simplesmente vá ao conteúdo e aplique qualquer ação nos nós.
REQUISIÇÃO E RESPOSTA

