
Analyse technique approfondie de CVE-2022-22965 (Spring4Shell) avec configuration de l'environnement, analyse de débogage pas à pas et décomposition de la chaîne d'exploitation pour une pratique en laboratoire éducatif.
Spring4Shell est le nom d'une CVE existant sur Spring Core du Spring Framework.
Avec un score CVSS 3.x de 9.8, la vulnérabilité est classée au plus haut niveau de risque (critique). Cette vulnérabilité permet à un attaquant d'exécuter du code d'exploitation à distance et de contrôler le serveur vulnérable.
Avec la popularité de Spring Core sur Internet et la gravité de l'impact de Spring4Shell, cette vulnérabilité est considérée par les experts comme ayant un impact non moins important que Log4shell.
Spring4Shell n'affecte pas toutes les applications web utilisant Spring Framework sur Internet ; elle exige que l'application web possède les éléments suivants :
Mon environnement de configuration aura les paramètres suivants :
Installer Apache Tomcat
Comme mentionné ci-dessus, j'utilise Kali 2021.4a et Apache Tomcat 9.0.45. Si vous ne savez pas comment installer Apache Tomcat et souhaitez le faire sur Kali Linux, vous pouvez consulter ce lien.
Note : Remplacez le lien https://mirror.kiu.ac.ug/apache/tomcat/tomcat-9/v9.0.45/bin/apache-tomcat-9.0.45.tar.gz par https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.45/bin/apache-tomcat-9.0.45.tar.gz
Choisir un IDE
Nous avons besoin d'un IDE pour coder le projet, l'empaqueter en fichier .war et surtout pour le débogage. J'utilise Intellij, vous pouvez tout à fait utiliser Eclipse ou Netbeans,... Tant que cet IDE supporte Java.
Créer un projet simple contenant la vulnérabilité
Mon projet est extrêmement simple, composé de :
un modèle HelloWorld.java

un contrôleur HelloWorldController.java

une vue hello.jsp

Construire le fichier .war
Pour empaqueter le projet, procédez comme suit : Build -> Build Artifacts -> helloworld:war -> Build.
Attendez que la construction soit réussie ; le projet aura alors un dossier out supplémentaire. Allez dans ./out/artifacts/your_war_name/ et vous verrez un fichier your_war_name.war ; ce fichier .war est le projet web après compilation et empaquetage, et peut être déployé sur des servlets Java comme Apache Tomcat.
Si Build Artifacts est grisé (impossible de construire les artefacts), cela signifie que les artefacts de construction n'ont pas été configurés pour ce projet. Allez dans : File -> Project Structure -> Artifacts -> Supprimez tous les artefacts existants -> Add (signe +) -> Web Application: Exploded -> From Modules... -> OK (fin de création de l'exploded) -> Add (signe +) -> Web Application: Archive -> For ‘helloworld:war exploded’ -> OK. Ensuite, refaites Build Artifacts.
Déployer et configurer le débogage
Déploiement
Pour déployer un fichier .war sur Apache Tomcat, il suffit de copier le fichier .war dans le dossier /webapps à l'intérieur du dossier Apache Tomcat (ex: pour moi, je copie le fichier helloworld.war (renommé pour plus de simplicité) dans /opt/tomcat/apache-tomcat-9.0.45/webapps/). Ensuite, démarrez le serveur Tomcat de deux manières (pour Linux) :
Après le déploiement, accédez à http://localhost:8080/helloworld
Configuration du débogage
Pour configurer le débogage (à distance) de Tomcat, procédez comme suit :
Côté serveur :
ouvrez le fichier catalina.sh et remplacez la valeur localhost par l'ip_may_ao du paramètre JPDA_ADDRESS

redémarrez le serveur Tomcat avec : /opt/tomcat/apache-tomcat-9.0.45/bin/catalina.sh jpda start. À ce moment, en plus d'ouvrir le port 8080 pour le serveur HTTP, Tomcat ouvrira également le port 8000 pour que nous puissions nous connecter et déboguer.
Note : Dans cette partie de débogage, j'exécute Intellij sur Windows 10 et Tomcat sur une machine virtuelle Kali, donc il est nécessaire de changer JDPA_ADDRESS ; si vous configurez à la fois Intellij et Windows 10 sur la même machine, vous n'avez pas besoin de le changer.
Côté Intellij :
allez dans Run -> Edit Configurations... -> Add (signe +) -> Remote JVM Debug
Donnez un nom -> modifiez Host et Port avec l'ip et le port que vous avez modifiés dans le fichier catalina.sh -> OK -> Shift + F9 (lancer le débogage)

Tout d'abord, je vais analyser le projet que j'utilise pour le débogage ; comme mentionné ci-dessus, ce projet se compose simplement de :