
Spring Framework CVE-2022-22965 projeto de verificação de condições de impacto local, atualização de versão para correção e reteste
Este projeto é utilizado para aprender e verificar o CVE-2022-22965 do Spring Framework, também conhecido como vulnerabilidade Spring4Shell, incluindo as condições de impacto, manifestação de risco, métodos de correção e o processo de re-teste pós-correção.
O projeto foi concluído em um ambiente de laboratório local autorizado e configurado individualmente. O foco do projeto não é atacar alvos reais, mas sim construir ambientes de teste Spring MVC antes e depois da correção, confirmar item por item as condições de impacto relacionadas à vulnerabilidade e usar um método somente leitura seguro e controlado para observar as diferenças nos caminhos de propriedade interna da vinculação de dados do Spring antes e depois da atualização de versão.
Este projeto concluiu os seguintes processos:
Este projeto é utilizado exclusivamente em ambientes locais auto-construídos ou em ambientes de teste de segurança explicitamente autorizados.
O projeto não realiza varredura, detecção ou exploração de vulnerabilidades em sites públicos, servidores ou sistemas de terceiros, e não contém dados reais de usuários ou dados reais de negócios.
Durante o teste, as seguintes operações NÃO foram executadas:
É proibido usar os métodos de teste deste projeto em qualquer alvo não autorizado.
O CVE-2022-22965, geralmente chamado de Spring4Shell, é uma vulnerabilidade de execução remota de código no Spring Framework relacionada ao mecanismo de vinculação de dados de parâmetros de requisição.
O Spring MVC suporta a vinculação automática de parâmetros de requisição HTTP a propriedades de objetos Java. Por exemplo, este projeto recebe parâmetros de nome e e-mail da seguinte forma:
@ModelAttribute("profile") UserProfile profile
Normalmente, os parâmetros de requisição name e email são vinculados ao objeto UserProfile de acordo com o nome da propriedade.
Nas versões afetadas, as restrições de acesso a alguns caminhos de propriedade interna não são suficientemente rigorosas. Ao usar JDK 9 ou superior, e atender a condições específicas do contêiner Servlet, modo de implantação e vinculação de dados, os parâmetros de requisição externos podem percorrer além dos objetos de negócio comuns para acessar objetos internos relacionados a Class do Java, módulos, carregadores de classe ou contêiner.
Em ambientes específicos exploráveis, um atacante pode modificar ainda mais a configuração do servidor ou escrever arquivos no servidor, formando assim um risco de execução remota de código.
Este projeto não executa a exploração completa de execução remota, mas sim usa o seguinte caminho de propriedade para diagnóstico diferencial seguro e somente leitura:
class.module.name
Este projeto foi concluído em um ambiente de laboratório isolado VMware local.
127.0.0.1Dados de teste de funcionalidade normal:
Alice[email protected]Caminho de propriedade para diagnóstico de segurança:
class.module.name
spring4shell-local-verification-lab/
README.md: Introdução do projeto, abordagem de teste, resultados de verificação e instruções de correçãodocs/: Relatório de verificação das condições de impacto local, correção e re-teste do Spring4Shellimages/: Capturas de tela do ambiente do projeto, processo de teste e re-testevulnerable-demo/: Projeto pré-correção usando Spring Framework 5.3.17fixed-demo/: Projeto pós-correção usando Spring Framework 5.3.18notes/: Anotações de estudo e registro do processoEstrutura principal do código-fonte:
config/: Classes de configuração Spring MVC e classes de inicialização da aplicaçãocontroller/: Controlador de processamento de formulários e diagnóstico de caminhos de propriedademodel/: Classe UserProfile para receber parâmetros de nome e e-mailWEB-INF/views/: Páginas JSP de página inicial, resultado de envio e resultado de diagnósticoEste projeto estabeleceu duas aplicações Spring MVC, uma antes e outra após a correção.
Diretório do projeto:
vulnerable-demo
Versão utilizada:
Spring Framework 5.3.17
Arquivo WAR gerado:
spring4shell-vulnerable-demo.war
Endereço de acesso:
http://127.0.0.1:8080/spring4shell-vulnerable-demo/
Página de diagnóstico:
http://127.0.0.1:8080/spring4shell-vulnerable-demo/binding-probe
Diretório do projeto:
fixed-demo
Versão utilizada:
Spring Framework 5.3.18
Arquivo WAR gerado:
spring4shell-fixed-demo.war
Endereço de acesso:
http://127.0.0.1:8080/spring4shell-fixed-demo/
Página de diagnóstico:
http://127.0.0.1:8080/spring4shell-fixed-demo/binding-probe
O projeto de teste fornece um formulário simples de perfil de usuário, contendo:
O controlador recebe os parâmetros de requisição da seguinte forma:
@ModelAttribute("profile") UserProfile profile
Quando o usuário envia nome e e-mail, o Spring MVC vincula automaticamente os parâmetros name e email ao objeto UserProfile.
A página de resultado lê o objeto vinculado e exibe o nome e e-mail enviados pelo usuário.
Esta funcionalidade é usada para confirmar que o projeto pode ser executado normalmente e, ao mesmo tempo, prova que existe uma entrada efetiva de vinculação de dados de parâmetros de requisição Spring MVC na aplicação.