Spring4Shell - PoC
CVE - 2022 - 22965
Versões afetadas :
- Versões do Spring Framework 5.3.0 a 5.3.17, 5.2.0 a 5.2.19 e versões mais antigas
- Java JDK 9
- Versões do Apache Tomcat abaixo de 10..0.20, 9.0.62 e 8.5.78
- Aplicações que são empacotadas como um WAR tradicional com dependência spring-webmvc ou spring-webflux e implantadas apenas em um contêiner Servlet independente são afetadas
Descrição
- O problema pode ser agravado por manipulação do classLoader
- A vinculação de dados inadequada, usada para preencher um objeto a partir de parâmetros de requisição (anotação Request Mapping), causa essa vulnerabilidade
- Atacantes podem carregar classes arbitrárias e injetar código arbitrário que pode ser executado pela aplicação
- Uma vulnerabilidade semelhante (CVE-2010-1622) foi divulgada anteriormente e correções foram aplicadas para restringir
class.classLoader e class.protectionDomain
- Mas o JDK9 introduziu um novo método
class.getMethod(), que contorna essa restrição usando class.module.classLoader para acessar qualquer propriedade filha do objeto de classe
Impacto
- A exploração bem-sucedida dessa vulnerabilidade pode levar à execução de código arbitrário na máquina vulnerável.
Aplicação de Teste
docker build . -t spring4shell-poc-app
Caso contrário, obtenha a imagem docker de [gokul2/spring4shell-poc]
docker pull gokul2/spring4shell-poc-app
docker run -p 8080:8080 spring4shell-poc-app
- A aplicação estará disponível em localhost:8080 agora.
- Execute o arquivo exploit.py