
Uma aplicação Spring MVC ou Spring WebFlux executando em JDK 9+ pode ser vulnerável a execução remota de código (RCE) via data binding. O exploit específico requer que a aplicação seja executada no Tomcat como uma implantação WAR. Se a aplicação for implantada como um jar executável do Spring Boot, ou seja, o padrão, ela não é vulnerável ao exploit. No entanto, a natureza da vulnerabilidade é mais geral, e pode haver outras formas de explorá-la.
CVE-2022-22965 (Spring4Shell, SpringShell) é uma vulnerabilidade no Spring Framework que utiliza a funcionalidade de data binding para vincular dados armazenados em uma requisição HTTP a determinados objetos usados por uma aplicação. O bug existe no método getCachedIntrospectionResults, que pode ser usado para obter acesso não autorizado a tais objetos passando seus nomes de classe por meio de uma requisição HTTP. Isso cria riscos de vazamento de dados e execução remota de código quando classes especiais de objetos são usadas. Essa vulnerabilidade é semelhante à já corrigida CVE-2010-1622, onde verificações de nomes de classe foram adicionadas como correção para que o nome não correspondesse a classLoader ou protectionDomain.
De acordo com o sistema CVSSv3, ela é classificada como gravidade CRÍTICA.
Abaixo estão oportunidades de detecção para CVE-2022-22965 que podem ser usadas para identificar a vulnerabilidade.
As condições atuais para a vulnerabilidade (conforme declarado no anúncio da vulnerabilidade pela Spring) podem ser resumidas da seguinte forma:
python3 exploit.py http://10.10.10.10/
Nota: a barra no final é muito importante aqui!
Procure pelo "action" do formulário de contato (a única requisição POST disponível para nós).
<form id="contactForm" action="/" method="post">
O action é "/", significando que nossa URL alvo será simplesmente: http://10.10.10.10/