
Exploit em Python para a vulnerabilidade RCE CVE-2022-22965 (Spring4Shell) no Java Spring Core. Injeta um webshell JSP através da configuração de log do Tomcat para executar comandos remotos em servidores vulneráveis.
A vulnerabilidade CVE-2022-22965, conhecida como Spring4Shell, é uma falha de execução remota de código (RCE) no framework Java Spring Core, presente nas versões anteriores a 5.3.18 e 5.2.20. Esta vulnerabilidade permite que um invasor injete código e o execute remotamente em um servidor vulnerável ao explorar uma má configuração dos logs do Tomcat. Ela foi descoberta em março de 2022 e afeta as aplicações activeMQ, Spring MVC e Spring WebFlux que funcionam com uma versão de JDK >= 9.

Já verificamos se temos uma versão de JDK >= 9, caso contrário, a ativamos:

Pré-requisitos ✔ Os módulos requests e BeautifulSoup são necessários para que o exploit funcione. Nós os instalamos com:
pip3 install bs4
pip3 install requests
Scan da rede

Aqui, temos o serviço activeMQ versão 5.17.3 em execução.
Em nossa estratégia de exploit, usaremos um script Python desenvolvido chamado spring4shell.py anexado a este projeto.
Objetivo deste script: Este script Python permite explorar a falha CVE-2022-22965 modificando os parâmetros de registro (logging) do Tomcat para injetar um webshell nos arquivos de log, permitindo assim a execução de comandos remotos no servidor comprometido.
Explicação do Código Python
Configuração das saídas do terminal:
A classe settings adapta a exibição no terminal de acordo com as opções escolhidas, com cores para diferenciar mensagens de informação, aviso e erro.
Geração de variáveis aleatórias:
As funções filename() e password() geram strings hexadecimais aleatórias para proteger o nome do arquivo e a senha do webshell.
Exploração da vulnerabilidade:
O script envia requisições para modificar os parâmetros de logging do Tomcat, injetando fragmentos de código JSP através dos logs. Ao configurar os logs para escrever no diretório webapps/ROOT, cada entrada se torna interpretável como código JSP.
O arquivo de log injetado atua então como um webshell acessível via navegador para executar comandos.
Interação com o Webshell:
A classe terminal abre uma interface interativa que permite enviar comandos ao servidor comprometido. Os comandos são enviados no parâmetro cmd, e as respostas são exibidas no terminal.
Após a execução do script, um link para o webshell é fornecido: Através do comando:
python3 spring4shell.py http://172.17.0.1

Obtemos acesso direto ao shell do nosso servidor activeMQ para executar todos os comandos que desejamos.
Fim do exploit !!!