
Passo a passo de laboratório para exploração da RCE CVE-2018-7600 (Drupalgeddon2) no Drupal 8.5.0, cobrindo análise de superfície de ataque, fingerprinting de versão e exploração via injeção na Form API.
Comece listando os containers em execução:
docker ps
A partir dos resultados do docker ps, o container deste Lab é:

p1/lab09:latest
Este container expõe a porta:
0.0.0.0:8011->80/tcp
Isso indica que o serviço dentro do container está escutando na porta 80/tcp e está mapeado para a porta 8011 no host.
A porta 80/tcp é a porta padrão para HTTP. Portanto, este lab alvo é muito provavelmente uma aplicação web HTTP. Para confirmar o serviço web, envio uma requisição HTTP usando curl combinado com o acesso à GUI da página web.
curl -i http://192.168.3.137:8011/


Avaliação da Superfície de Ataque
A partir da resposta HTTP e da interface web, as seguintes informações foram identificadas:
Web server: Apache/2.4.25 (Debian) Backend: PHP/7.2.3 CMS: Drupal Drupal version: 8.5.0 Install path: /core/install.php Public port: 8011 -> 80/tcp
Essas informações servem como fingerprints cruciais para correlacionar com CVEs. Especificamente, Drupal 8.5.0 é a versão diretamente relacionada ao CVE-2018-7600, também conhecido como Drupalgeddon2.
De acordo com o aviso oficial da Drupal, SA-CORE-2018-002 / CVE-2018-7600 afeta as seguintes versões:
>= 8.5.0 < 8.5.1
O alvo atual está executando:
Drupal 8.5.0
portanto, estando dentro da faixa de versões afetadas.
⇒ Raciocínio:
Nesta etapa, a versão 8.5.0 do Drupal é uma forte evidência para identificar o CVE suspeito. Raciocino da seguinte forma:
docker ps mostra que o Lab expõe o serviço HTTP pela porta 8011.curl -i retorna uma resposta HTTP válida do Apache/PHP./core/install.php.Drupal >=8.5.0 <8.5.1 é afetado pelo CVE-2018-7600.Drupal 8.5.0, tornando-o elegível sob os critérios de versão para testar o CVE-2018-7600.O alvo é Drupal 8.5.0 rodando em Apache/PHP. Esta versão está dentro da faixa afetada pelo CVE-2018-7600 de acordo com o aviso oficial da Drupal. O próximo passo é verificar as condições reais de exploração para confirmar se o alvo pode ser submetido a RCE.

A partir da etapa anterior de fingerprinting, o alvo exibe claramente: Drupal 8.5.0. De acordo com o aviso oficial da Drupal, a vulnerabilidade SA-CORE-2018-002 / CVE-2018-7600 afeta as versões do núcleo do Drupal:
>= 8.5.0 < 8.5.1. O alvo atual executa exatamente Drupal 8.5.0, colocando-o dentro da faixa de versões afetadas. De acordo com o aviso da Drupal, esta é uma vulnerabilidade de Execução Remota de Código no núcleo do Drupal, que poderia permitir que um atacante explorasse múltiplos vetores de ataque e levasse ao comprometimento de todo o site.
No entanto, você pode ver que o alvo está redirecionando para /core/install.php e a GUI exibe a tela de instalação do Drupal. Isso sugere que o Drupal pode estar em um estado de instalação incompleta. Se a configuração do site não foi concluída, endpoints comuns usados para acionar o Drupalgeddon2, como /user/register, /user/password e /user/login, podem não funcionar corretamente. Portanto, é necessário verificar esses endpoints.
curl -i http://192.168.3.137:8011/user/register curl -i http://192.168.3.137:8011/user/password curl -i http://192.168.3.137:8011/user/login

Pode-se ver que os endpoints ainda são redirecionados para /core/install.php
Conclusão:
O alvo executa Drupal 8.5.0, estando dentro da faixa de versões afetadas pelo CVE-2018-7600 de acordo com o aviso oficial da Drupal. No entanto, no momento do teste, a aplicação está em estado de instalador e redireciona continuamente rotas como /user/register, /user/password e /user/login para /core/install.php.
Isso mostra que os endpoints comumente usados para verificar o Drupalgeddon2 ainda não estão funcionando como funcionariam em um site Drupal totalmente instalado. Portanto, o alvo atualmente apenas satisfaz a condição de versão, mas ainda não atende às condições de execução para demonstrar a Execução Remota de Código.
=> Raciocínio:
Precisamos provar ainda mais que o Drupal em seu estado de execução pode processar as rotas/formulários vulneráveis, que um atacante pode acessar os endpoints sem autenticação, e que payloads de verificação como id podem ser executados com sucesso.
No alvo atual, os endpoints redirecionam para o instalador, então o próximo caminho é avaliar se a tela de instalação do Drupal cria sua própria superfície de ataque, em vez de concluir imediatamente uma RCE Drupalgeddon2.
Depois de verificar que os endpoints de execução do Drupal, como /user/register, /user/password e /user/login, são todos redirecionados para /core/install.php, prossegui para analisar a tela do instalador.
Verificando o serviço de banco de dados que dá suporte ao instalador
Como o instalador do Drupal está atualmente parado na etapa de configuração do banco de dados, verifiquei se serviços comuns de banco de dados estão expostos externamente:
nmap -sV -p 3306,5432,33060 192.168.3.137

O alvo atualmente expõe o instalador do Drupal externamente, mas nenhum serviço de banco de dados acessível diretamente pela máquina do atacante foi detectado.
Conclusão: O lab expõe o instalador do Drupal 8.5.0 e possui divulgação de informações sobre a versão vulnerável. O CVE-2018-7600 é um vetor suspeito válido, mas a exploração bem-sucedida ainda não foi comprovada.
O CVE-2018-7600 explora uma vulnerabilidade na Drupal Form API - o sistema de renderização de formulários que utiliza a estrutura Render Array. Ao processar uma requisição AJAX, o Drupal usa o parâmetro element_parents para localizar elementos na árvore do formulário sem verificar (sanitizar) chaves que começam com o caractere #. Atacantes injetam propriedades como #post_render, #markup e #type via dados POST para forçar o mecanismo de renderização a executar funções PHP arbitrárias (ex.: exec, passthru, system).
Condição pré-requisito: Pelo menos um endpoint que use a Form API deve retornar uma resposta válida (não redirecionado, não bloqueado por controle de acesso) para que o atacante possa enviar uma requisição AJAX contendo o payload.
Endpoints comumente usados em PoCs públicos:
/user/register (formulário de registro - não requer login)/user/password (formulário de recuperação de senha - não requer login)/user/login (formulário de login - não requer login)No alvo atual: Todos os 3 endpoints acima são redirecionados via 302 para /core/install.php ⇒ ainda não satisfeito