Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
spring4shell-local-verification-lab — Spring Framework CVE-2022-22965 本地影响条件验证、版本升级修复与复测项目 | Kitploit
Ferramentas/GitHubGitHub/meng-security/spring4shell-local-verification-lab
Vulnerability AnalysisCode AnalysisExploitationWeb SecurityLearning & EducationLabs & Practice
GitHubmeng-security/spring4shell-local-verification-lab

spring4shell-local-verification-lab

Spring Framework CVE-2022-22965 本地影响条件验证、版本升级修复与复测项目

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório
há 1 mêsAinda não revisado

Projeto de Verificação, Correção e Re-teste das Condições de Impacto Local do Spring4Shell

Introdução ao Projeto

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:

  • Preparação do ambiente JDK, Maven e Apache Tomcat
  • Construção do projeto WAR Spring MVC
  • Verificação da linha de base da funcionalidade normal
  • Confirmação das condições de impacto da vulnerabilidade
  • Diagnóstico somente leitura dos caminhos de propriedade interna
  • Análise da causa raiz da vulnerabilidade
  • Atualização da versão do Spring Framework
  • Re-teste de segurança pós-correção
  • Re-teste da funcionalidade normal pós-correção
  • Organização do relatório de teste e evidências de capturas de tela

Declaração de Segurança

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:

  • Não foi escrito WebShell
  • Não foram executados comandos do sistema
  • Não foram modificadas configurações do Tomcat
  • Não foi estabelecido um shell reverso
  • Não foi realizado controle persistente
  • Nenhum impacto foi causado a sistemas externos

É proibido usar os métodos de teste deste projeto em qualquer alvo não autorizado.

Contexto da Vulnerabilidade

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

Objetivos do Projeto

  1. Entender o processo básico de vinculação de dados de parâmetros de requisição do Spring MVC.
  2. Construir um projeto de teste Spring MVC WAR local.
  3. Concluir a verificação da linha de base da funcionalidade normal de negócios.
  4. Confirmar as condições de impacto, como Spring Framework, JDK, Tomcat, implantação WAR e entrada de vinculação de dados.
  5. Usar um método somente leitura para observar o desempenho de acesso aos caminhos de propriedade interna.
  6. Analisar as principais causas da vulnerabilidade.
  7. Atualizar o Spring Framework para a versão corrigida.
  8. Realizar o re-teste pós-correção usando o mesmo método.
  9. Confirmar que a atualização de versão não afetou a funcionalidade normal de negócios.
  10. Organizar o código-fonte do projeto, relatório de teste e evidências de capturas de tela.

Ambiente Experimental

Este projeto foi concluído em um ambiente de laboratório isolado VMware local.

  • Máquina host: Windows 11
  • Máquina alvo: Máquina virtual Windows 10
  • Software de virtualização: VMware Workstation
  • Ambiente Java: Eclipse Temurin JDK 11.0.31
  • Ferramenta de construção do projeto: Apache Maven 3.9.16
  • Contêiner Servlet: Apache Tomcat 9.0.60
  • Versão do Spring Framework antes da correção: 5.3.17
  • Versão do Spring Framework após a correção: 5.3.18
  • Framework Web: Spring MVC
  • Modo de implantação do projeto: Implantação tradicional de pacote WAR
  • Endereço de teste: 127.0.0.1

Dados de teste de funcionalidade normal:

  • Nome: Alice
  • E-mail: [email protected]

Caminho de propriedade para diagnóstico de segurança:

class.module.name

Estrutura do Projeto

spring4shell-local-verification-lab/

  • README.md: Introdução do projeto, abordagem de teste, resultados de verificação e instruções de correção
  • docs/: Relatório de verificação das condições de impacto local, correção e re-teste do Spring4Shell
  • images/: Capturas de tela do ambiente do projeto, processo de teste e re-teste
  • vulnerable-demo/: Projeto pré-correção usando Spring Framework 5.3.17
  • fixed-demo/: Projeto pós-correção usando Spring Framework 5.3.18
  • notes/: Anotações de estudo e registro do processo

Estrutura principal do código-fonte:

  • config/: Classes de configuração Spring MVC e classes de inicialização da aplicação
  • controller/: Controlador de processamento de formulários e diagnóstico de caminhos de propriedade
  • model/: Classe UserProfile para receber parâmetros de nome e e-mail
  • WEB-INF/views/: Páginas JSP de página inicial, resultado de envio e resultado de diagnóstico

Descrição do Projeto de Teste

Este projeto estabeleceu duas aplicações Spring MVC, uma antes e outra após a correção.

Projeto Pré-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

Projeto Pós-Correção

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

Descrição da Funcionalidade Normal

O projeto de teste fornece um formulário simples de perfil de usuário, contendo:

  • Campo de entrada de nome
  • Campo de entrada de e-mail
  • Botão de envio de perfil

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.

Abordagem de Teste

Este projeto segue a abordagem de "primeiro confirmar a funcionalidade normal, depois confirmar as condições de impacto, em seguida realizar o diagnóstico de risco somente leitura, e finalmente corrigir e re-testar".

  1. Instalar e configurar JDK 11, Maven e Apache Tomcat.
  2. Construir um projeto Spring MVC usando Spring Framework 5.3.17.
  3. Criar um formulário de nome e e-mail.
  4. Usar @ModelAttribute para vincular os parâmetros de requisição ao objeto UserProfile.
  5. Usar Maven para empacotar o projeto como um arquivo WAR.
  6. Implantar o arquivo WAR no Apache Tomcat em execução independente.
  7. Enviar um perfil de usuário simulado localmente para concluir a verificação da linha de base da funcionalidade normal.
  8. Verificar o JDK, Tomcat, Spring Framework e modo de implantação reais em execução.
  9. Usar o BeanWrapper do Spring para realizar diagnóstico somente leitura de class.module.name.
  10. Registrar os resultados de acesso ao caminho de propriedade no ambiente Spring Framework 5.3.17.
  11. Atualizar o Spring Framework para 5.3.18.
  12. Reconstruir e implantar o projeto corrigido.
  13. Realizar o re-teste pós-correção usando o mesmo caminho de propriedade.
  14. Enviar nome e e-mail novamente para confirmar que a funcionalidade normal não foi afetada.

Confirmação das Condições de Impacto

Este projeto confirmou item por item as seguintes condições de impacto:

  • Uso de JDK 11.0.31, atendendo à condição de JDK 9 ou superior
  • Uso de Spring Framework 5.3.17
  • O projeto inclui o componente spring-webmvc
  • Uso de Apache Tomcat 9.0.60
  • O projeto é implantado como um pacote WAR tradicional
  • O projeto é carregado pelo Tomcat em execução independente
  • O controlador possui uma entrada de vinculação de dados baseada em @ModelAttribute

As dependências Spring reais implantadas no projeto pré-correção incluem:

  • spring-beans-5.3.17.jar
  • spring-core-5.3.17.jar
  • spring-web-5.3.17.jar
  • spring-webmvc-5.3.17.jar

Este projeto não julga diretamente se a vulnerabilidade é válida apenas com base na versão do Spring Framework, mas sim realiza uma análise abrangente combinando JDK, Spring MVC, Tomcat, implantação WAR e entrada de vinculação de dados.

Método de Diagnóstico de Risco

Para evitar a execução de exploração de vulnerabilidade destrutiva, este projeto usa o BeanWrapper fornecido pelo Spring Framework para realizar uma verificação somente leitura do seguinte caminho de propriedade:

class.module.name

Este caminho significa:

  • class: acessa o objeto Class Java correspondente ao objeto de negócio atual
  • module: acessa o módulo Java ao qual a classe pertence
  • name: lê o nome do módulo

O processo de diagnóstico chama apenas métodos de verificação de legibilidade de propriedade e leitura de valor de propriedade:

  • Não define propriedades de objeto
  • Não modifica configurações do servidor
  • Não escreve arquivos no servidor
  • Não executa comandos do sistema operacional

Portanto, este diagnóstico só pode ser usado para observar as diferenças de acesso aos caminhos de propriedade interna antes e depois da correção, e não pode provar sozinho que a execução remota de código foi alcançada.

Resultados da Verificação

Resultados Pré-Correção

O ambiente pré-correção usa:

Spring Framework 5.3.17

Verificação do caminho de propriedade:

class.module.name

Resultado do diagnóstico:

  • Pode ser lido?: true
  • Resultado da leitura: null

true significa que o ambiente atual pode continuar a resolver module.name ao longo da propriedade class do objeto de negócio comum.

O resultado da leitura é null porque a aplicação WAR atual está sendo executada em um módulo Java não nomeado, onde o nome do módulo está vazio, o que não significa que a leitura do caminho de propriedade falhou.

Resultados Pós-Correção

O ambiente pós-correção usa:

Spring Framework 5.3.18

Re-diagnóstico usando o mesmo caminho de propriedade:

class.module.name

Resultado do diagnóstico:

  • Pode ser lido?: false
  • Resultado da leitura: Not readable

Os resultados antes e depois da correção formam um contraste claro:

  • Spring Framework 5.3.17: o caminho de propriedade pode ser lido
  • Spring Framework 5.3.18: o caminho de propriedade não pode ser lido

Este resultado indica que, após a atualização da versão, o acesso ao caminho de propriedade de diagnóstico original foi restringido, e a manifestação de risco observada antes da correção não aparece mais.

Medidas de Correção

Este projeto adota a abordagem de atualizar a versão do Spring Framework para correção.

Configuração pré-correção:

<spring.version>5.3.17</spring.version>

Configuração pós-correção:

<spring.version>5.3.18</spring.version>

Durante o processo de correção, as seguintes operações foram concluídas:

  1. Copiar o projeto pré-correção para fixed-demo.
  2. Manter a lógica de negócios do Controlador, modelo de dados e páginas JSP inalterada.
  3. Atualizar o Spring Framework de 5.3.17 para 5.3.18.
  4. Usar Maven para baixar novamente as dependências da versão corrigida.
  5. Recompilar e gerar o arquivo WAR da versão corrigida.
  6. Implantar o WAR da versão corrigida no Apache Tomcat.
  7. Verificar as versões reais dos JARs Spring implantados no projeto corrigido.
  8. Realizar o re-teste de segurança usando o caminho de propriedade original.
  9. Re-testar a funcionalidade de envio de nome e e-mail.

As dependências Spring reais implantadas no projeto pós-correção incluem:

  • spring-beans-5.3.18.jar
  • spring-core-5.3.18.jar
  • spring-web-5.3.18.jar
  • spring-webmvc-5.3.18.jar

Este resultado prova que a versão corrigida foi reconstruída e implantada de fato, não apenas o número da versão no pom.xml foi alterado.

Re-teste de Funcionalidade Normal Pós-Correção

Após a atualização para Spring Framework 5.3.18, acesse novamente a página inicial do projeto corrigido e envie os seguintes dados de teste:

  • Nome: Alice
  • E-mail: [email protected]

Após o envio, a página ainda exibe normalmente:

  • Perfil de usuário enviado com sucesso
  • Nome é Alice
  • E-mail é [email protected]

Este resultado indica que a atualização da versão não afetou a funcionalidade original de vinculação de parâmetros de requisição e exibição de página do projeto.

Causa Raiz da Vulnerabilidade

O mecanismo de vinculação automática de dados do Spring MVC pode acessar propriedades de objetos Java com base nos nomes dos parâmetros de requisição HTTP.

Os parâmetros normais de negócios name e email precisam apenas acessar as propriedades comuns correspondentes em UserProfile.

No entanto, o mecanismo de acesso a propriedades do Spring também suporta caminhos de propriedade aninhados com pontos. Nas versões afetadas, as restrições a alguns caminhos de propriedade interna não são suficientemente rigorosas, permitindo que, em ambientes específicos, os parâmetros externos possam continuar a partir do objeto de negócio comum para objetos relacionados a Class do Java, módulos, carregadores de classe ou contêiner Servlet.

Quando existem propriedades graváveis em objetos internos que podem afetar a configuração do servidor ou o sistema de arquivos, e a aplicação atende simultaneamente às condições de JDK, Tomcat, implantação WAR e vinculação de dados, pode-se formar um risco de execução remota de código.

Esta vulnerabilidade não se deve ao fato de que as propriedades name ou email em si tenham problemas, nem todos os projetos que usam Spring MVC podem ser explorados. A validade da vulnerabilidade geralmente requer a coexistência de múltiplas condições.

Recomendações de Correção

Em sistemas de negócios reais, recomenda-se tomar as seguintes medidas:

  • Verificar as versões reais do Spring Framework e Spring Boot em execução
  • Priorizar a atualização para versões de segurança que ainda são oficialmente suportadas
  • Reconstruir e implantar a aplicação após a atualização
  • Verificar as versões reais dos JARs Spring no pacote de implantação final
  • Restringir o escopo de vinculação de dados do Controlador
  • Permitir apenas a vinculação dos campos necessários para os negócios normais
  • Usar objetos de dados de requisição dedicados para receber parâmetros externos
  • Evitar expor entidades de banco de dados ou objetos internos complexos diretamente a parâmetros externos
  • Não depender da validação do front-end para concluir as restrições de segurança
  • Tomar medidas de mitigação temporárias para sistemas que não podem ser atualizados imediatamente
  • Medidas de mitigação temporárias não podem substituir a atualização formal da versão
  • Executar o Tomcat e serviços Java com contas de baixo privilégio
  • Definir permissões mínimas necessárias nos diretórios da aplicação e de configuração
  • Monitorar parâmetros de requisição anômalos e alterações em arquivos do servidor
  • Após a correção, realizar tanto o re-teste de segurança quanto o re-teste da funcionalidade normal de negócios

Evidências de Capturas de Tela Principais

Ambiente e Implantação

Confirmação da versão do JDK 11

Confirmação da versão do Maven

Inicialização bem-sucedida do Apache Tomcat 9.0.60

Empacotamento Maven bem-sucedido

Implantação do projeto WAR bem-sucedida

Linha de Base da Funcionalidade Normal

Acesso normal à página inicial do projeto de teste

Verificação da linha de base da funcionalidade normal bem-sucedida

Verificação Pré-Correção

Confirmação da dependência Spring Framework 5.3.17

Caminho de propriedade interna legível antes da correção

Correção e Re-teste

Empacotamento da versão corrigida bem-sucedido

Caminho de propriedade interna não legível após a correção

Re-teste da funcionalidade normal pós-correção bem-sucedido

Confirmação da dependência Spring Framework 5.3.18 após a correção

Progresso Atual

  • Criar diretório do projeto
  • Escrever README
  • Criar relatório de teste
  • Preparar ambiente JDK, Maven e Tomcat
  • Construir projeto de teste Spring MVC
  • Concluir empacotamento e implantação do projeto WAR
  • Concluir verificação da linha de base da funcionalidade normal
  • Concluir confirmação das condições de impacto da vulnerabilidade
  • Concluir diagnóstico local de risco somente leitura
  • Concluir análise da causa raiz da vulnerabilidade
  • Concluir atualização da versão do Spring Framework
  • Concluir re-teste de segurança pós-correção
  • Concluir re-teste da funcionalidade normal pós-correção
  • Confirmar versões reais das dependências após a correção
  • Organizar relatório de teste e evidências de capturas de tela

Resumo do Projeto

Este projeto concluiu a confirmação das condições de impacto, diagnóstico de manifestação de risco, correção por atualização de versão e re-teste pós-correção do CVE-2022-22965 do Spring Framework em um ambiente local isolado.

O projeto pré-correção usou Spring Framework 5.3.17. No ambiente com JDK 11, Spring MVC, Apache Tomcat 9.0.60 e implantação WAR tradicional, o caminho de propriedade class.module.name foi considerado legível.

O projeto pós-correção atualizou o Spring Framework para 5.3.18. O mesmo caminho de propriedade tornou-se ilegível, enquanto a funcionalidade normal de vinculação de dados para nome e e-mail continuou utilizável.

Este projeto não executou a exploração completa de execução remota de código, mas sim completou a verificação diferencial antes e depois da correção através de um método seguro e controlado de somente leitura.

O projeto enfatiza as seguintes habilidades:

  • Configuração básica de ambiente Java e Spring MVC
  • Construção de projetos Maven
  • Implantação de aplicações WAR no Tomcat
  • Compreensão do mecanismo de vinculação de dados do Spring
  • Análise de condições de impacto de vulnerabilidade
  • Projeto de processo de teste de segurança
  • Atualização de versão de componentes
  • Re-teste pós-correção
  • Teste de regressão de funcionalidade normal
  • Elaboração de relatório de teste de segurança
  • Organização de capturas de tela de evidências e projetos GitHub
Baixar ferramenta