
Vulnerabilidade RCE no Apache Struts 2.0 - Permite que um atacante injete comandos do sistema operacional em uma aplicação web através do cabeçalho content-type
Vulnerabilidade de RCE no Apache Struts 2.0
Este é um script para explorar o CVE-2017-5638 - Ele permite que um atacante injete comandos de sistema operacional em uma aplicação web através do cabeçalho content-type Apache Struts 2 é um framework de aplicações web open-source para desenvolver aplicações web Java EE. Ele usa e estende a Java Servlet API para incentivar os desenvolvedores a adotar uma arquitetura model–view–controller (MVC).
Durante a última semana de março de 2017, um hacker do Apache Struts conhecido como "Nike Zheng" publicou um exploit público de prova de conceito mostrando como é fácil para alguém executar comandos de sistema operacional remotamente em um servidor vulnerável Apache Struts 2.
A vulnerabilidade, CVE-2017-5638 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638, permite Execução Remota de Código (RCE) não autenticada através de um valor Content-Type especialmente criado em uma requisição HTTP. Um atacante pode criar um valor inválido para Content-Type que fará o software vulnerável lançar uma exceção. Quando o software está preparando a mensagem de erro para exibição, uma falha no parser Jakarta Multipart do Apache Struts faz com que o valor malicioso de Content-Type seja executado em vez de exibido.
Desde a publicação deste exploit público, foi observado um grande número de varreduras em busca de servidores Apache vulneráveis. Como o exploit é muito fácil de executar, qualquer pessoa pode explorar máquinas vulneráveis remotamente com absoluta facilidade. Assim, exploits frequentes após o grande número de varreduras foram relatados.
Um de nossos clientes queria que verificássemos todos os seus IPs, pois eles usavam amplamente o framework Apache Struts 2 vulnerável e não tinham registros exatos de quais IPs (servidores web) estavam executando um framework Apache vulnerável. Havia cerca de mil IPs que precisavam ser testados. O cliente exigiu que enviássemos todos os domínios vulneráveis juntamente com a informação se é um servidor Linux ou Windows. Para evitar a tarefa tediosa de verificar cada IP individualmente, escrevi um pequeno script.
O script combina as seguintes funções/tarefas:
Ler os nomes de domínio vulneráveis um a um do arquivo que contém a lista de domínios.
Utiliza o exploit oficial para verificar servidores vulneráveis.
Executa o exploit e verifica se é um servidor windows ou linux.