CVE-2018-7600 - Execução Remota de Código no Drupal 7

RustSecurity

Repositório

Uma implementação em Rust do Exploit CVE-2018-7600 direcionado a instalações vulneráveis ​​do Drupal 7 (<= 7.57). Esta CLI reproduz o seguinte fluxo de PoC: ele envenena um formulário renderizável em cache por meio do caminho usuário/senha, extrai um form_build_id e, em seguida, aciona o payload em cache por meio do endpoint arquivo/Ajax para obter execução remota de código por meio de uma invocação de função PHP.

Visão Geral da Vulnerabilidade

CVE-2018-7600 é uma vulnerabilidade de execução remota de código que afeta o Drupal 7 (e o Drupal 8 em um contexto diferente). No Drupal 7, o problema decorre da sanitização insuficiente quando determinados arrays renderizáveis ​​são armazenados em cache e posteriormente renderizados. Ao injetar metadados de renderização especialmente criados em um endpoint armazenado em cache, um invasor pode fazer com que funções PHP arbitrárias sejam executadas quando os dados em cache forem renderizados ou solicitados posteriormente.

Detalhes Técnicos

  • O exploit explora o sistema de renderização e o cache do Drupal para inserir um array renderizável cujo retorno de chamada #post_render é uma função PHP arbitrária (por exemplo, passthru).
  • O fluxo de PoC normalmente envia para ?q=user/password com os parâmetros do array renderizável criado, para que o Drupal armazene em cache o formulário envenenado.
  • Após o envenenamento e o recebimento de um form_build_id, o PoC aciona o payload chamando /file/ajax/name/#value/<form_build_id> com o form_build_id no corpo do POST. Quando o Drupal renderiza o elemento em cache, o retorno de chamada #post_render é executado com marcação controlada pelo invasor, permitindo a execução do comando.

Descrição

Esta construção da CLI Rust executa a sequência de duas etapas (envenenar e depois disparar) contra os parâmetros de solicitação de um site Drupal 7 alvo, analisa a resposta HTML em busca de form_build_id e, em seguida, dispara o endpoint file/ajax para executar a função especificada pelo invasor.

Como o cliente desabilita a verificação de certificado (para espelhar a PoC original que passou verify=False), a ferramenta funcionará contra alvos que usam certificados TLS autoassinados ou inválidos. Esse comportamento pode ser alterado no código-fonte se você preferir exigir certificados válidos.

Uso

Uso básico (o comando padrão é whoami, a função padrão é passthru):

cargo run -- -u http://target.com/

Execute um comando e função personalizados:

cargo run -- -u http://target.com/ -c "whoami" -f "passthru"

Use um proxy HTTP/S (formato: http://127.0.0.1:8080/):

cargo run -- -u http://target.com/ -p http://127.0.0.1:8080/

Resumo das opções da CLI:

  • -u, target: URL do site Drupal de destino (ex.: http://target.com/).
  • -c, --command: Comando a ser executado no alvo (padrão: whoami).
  • -f, --function: Função PHP a ser usada como vetor de ataque (padrão: passthru).
  • -p, --proxy: URL de proxy opcional para roteamento de solicitações.

Exemplo de fluxo completo:

  1. Envenene o formulário user/password, inserindo o callback #post_render e #markup contendo o comando.
  2. Analise a resposta para encontrar form_build_id dentro de form#user-pass.
  3. POSTE para ?q=file/ajax/name/#value/<form_build_id> com o form_build_id para acionar a renderização e executar o comando.

Esta ferramenta é apenas para fins educacionais e de testes de penetração autorizados. Use com responsabilidade e apenas em sistemas de sua propriedade ou para os quais tenha permissão explícita.****