Testando a vulnerabilidade Spring4Shell

Michelle Mesquita
4 min readJun 19, 2022

--

Hoje, resolvi trazer uma vulnerabilidade que foi muito comentada no início do ano de 2022.

Para isso, iremos desenvolver uma aplicação, como também, entenderemos mais a respeito da mesma :)

Spring Boot é um framework Java open source que tem como objetivo facilitar esse processo em aplicações Java. Assim, ele fornece a maioria dos componentes baseados no Spring de maneira pré-configurada, tornando possível termos uma aplicação rodando em produção rapidamente e com o esforço mínimo de configuração e implantação.

A vulnerabilidade consistiu em utilizar o pacote .war da aplicação buildada (com todos os arquivos e dependências para rodar a aplicação) no apache Tomcat em versões 10.0.19, 9.0.61, 8.5.77 ou mais novas.

O Tomcat é um servidor web Java, mais especificamente, um container de servlets. Dessa maneira, utilizado para rodar a aplicação. Portanto, além do Tomcat vulnerável, era necessário utilizar um requisições com parâmetros (como o @ModelAttribute) e buildar utilizando o .war e não o .jar

Com esse conjunto de fatores era possível executar um código remotamente e assim, explorar o servidor onde a aplicação estava sendo hospedada! Dessa maneira, essa vulnerabilidade passou a ficar conhecida como Spring4Shell.

Ela se torna extremamente perigosa por ser facilmente explorada e executada.

Portanto, rapidamente as pessoas tiveram que fazer o downgrade da aplicação enquanto o problema estava sendo resolvido.

Aqui, faremos uma poc que utilizei como base essa aplicação:

Portanto, fiz minhas alterações onde vocês podem acompanhar aqui no meu Github e falarei dos pontos principais da PoC

Aqui na parte do controle da aplicação, quando pensamos na arquitetura MVC (Model — View- Controller). O Controller serve para intermediar as requisições fornecidas pela resposta do Model e que são vistas na View.

Podemos ver aqui no código, justamente a requisição /post , utilizando o @ModelAttribute , que é a forma utilizada no Spring Boot.

Além disso, adicionamos a aplicação vulnerável no container para rodarmos facilmente a aplicação com o Tomcat.

Após criarmos nosso formulário que é usado pelo método POST, precisamos fazer o build dessa aplicação para ser adicionado ao Tomcat, conforme imagem abaixo.

Para criarmos o build, utilizamos o seguinte comando para fazer o build e adicionamos essas informações abaixo no arquivo pom.xml:

O arquivo pom.xml é considerado o coração de um projeto Maven. Nós descrevemos as dependências de nosso projeto e a maneira como este deve ser compilado.

mvn clean package

Ao fazermos o build da nossa imagem, podemos rodá-la em nossa máquina

docker run -it --rm -p 8888:8080 vulnerable-tomcat

Podemos ver a aplicação rodando na seguinte url: http://127.0.0.1:8888/spring-form/script

E para testar a vulnerabilidade, é bem simples. Basta digitar esse comando que esta relacionado com o nome do formulário que criamos.

http://127.0.0.1:8888/tomcatwar.jsp?pwd=j&cmd=pwd

Onde passamos comando linux como parâmetro, visto que nossa aplicação está rodando em um container baseado em Linux :)

Como resposta, podemos ver o caminho do diretório e outras informações, comprovando que é uma aplicação que roda Java.

Aqui, por exemplo, vemos o usuário que a aplicação roda que é o usuário root!

http://127.0.0.1:8888/tomcatwar.jsp?pwd=j&cmd=whoami

Espero que tenham gostado 💜

--

--

Michelle Mesquita
Michelle Mesquita

Written by Michelle Mesquita

DevSecOps & AppSec Engineer & Developer girl 👩‍💻

No responses yet