A equipe do Spring publicou orientação sobre a CVE-2022-22965, uma vulnerabilidade crítica de execução remota de código no Spring Framework associada a data binding em aplicações Spring MVC ou Spring WebFlux rodando em JDK 9 ou superior. O cenário específico de exploração exige aplicação empacotada como WAR e executada em Tomcat como Servlet container, enquanto aplicações Spring Boot no formato executable jar padrão não são vulneráveis ao exploit descrito.1

O nome Spring4Shell circula rapidamente porque combina dois elementos sensíveis: Java corporativo e execução remota de código. A comparação automática com Log4Shell é tentadora, mas operacionalmente perigosa. O caminho de exploração, os pré-requisitos e o componente afetado são diferentes. O trabalho correto começa por separar aplicações expostas, versão do Spring, modo de empacotamento, versão do JDK e container usado.

Data binding vira superfície de ataque

A vulnerabilidade envolve o mecanismo que popula objetos a partir de parâmetros de requisição, especialmente em métodos de controller com @ModelAttribute ou uso equivalente. Esse tipo de recurso é comum porque reduz código repetitivo em aplicações web. O problema é que conveniência de binding também pode abrir caminho para propriedades internas que não deveriam ser manipuláveis por entrada externa.

Segundo o comunicado inicial, a falha foi reportada à VMware e detalhes vazaram publicamente antes da publicação completa do CVE, levando a equipe a antecipar a comunicação. Esse contexto explica a urgência: quando detalhes técnicos circulam antes de inventário e patching, defensores precisam agir com informação ainda em consolidação.2

A lista de versões afetadas inclui Spring Framework 5.3.0 a 5.3.17, 5.2.0 a 5.2.19 e versões antigas sem suporte. A recomendação principal é atualizar para 5.3.18 ou 5.2.20. Esse é o ponto que deve orientar a resposta, porque mitigação parcial em aplicação web tende a ser frágil quando há múltiplos controllers, configurações locais e dependências indiretas.

Resposta começa por inventário Java

Para equipes de plataforma, o primeiro passo é descobrir onde Spring Framework entra direta ou transitivamente. Monólitos antigos em WAR, aplicações em Tomcat standalone, serviços migrados parcialmente para Spring Boot, imagens Docker com servidores de aplicação e pacotes mantidos por fornecedores podem ter perfis diferentes. A pergunta não é apenas "usamos Spring?", mas "como empacotamos e executamos cada aplicação?".

Aplicações Spring Boot em executable jar padrão têm um sinal de risco diferente do WAR tradicional em container externo, mas isso não autoriza complacência. O próprio advisory observa que a natureza da vulnerabilidade é mais geral e que podem existir outras formas de exploração. Atualizar continua sendo a resposta limpa sempre que possível.

O comunicado também descreve workarounds para cenários em que atualização imediata não é viável, incluindo restringir campos em WebDataBinder. Essas medidas ajudam na contenção, mas exigem cuidado. Uma configuração global pode ser sobreposta por @InitBinder local, e regras de bloqueio mal aplicadas criam sensação falsa de cobertura.

Spring4Shell reforça a necessidade de pipelines capazes de atualizar frameworks rapidamente. Em Java corporativo, dependências fundamentais podem ficar escondidas atrás de starters, BOMs e servidores legados. Quando uma falha crítica aparece, a diferença entre uma equipe preparada e uma equipe exposta está no inventário, na automação de build e na capacidade de promover patch sem redesenhar a aplicação inteira.


  1. Spring, "CVE-2022-22965: Spring Framework RCE via Data Binding on JDK 9+", 31 mar. 2022.
  2. Spring Blog, "Spring Framework RCE, Early Announcement", 31 mar. 2022.