Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
spring4shell-local-verification-lab — Spring Framework CVE-2022-22965 本地影响条件验证、版本升级修复与复测项目 | Kitploit
Outils/GitHubGitHub/meng-security/spring4shell-local-verification-lab
Vulnerability AnalysisCode AnalysisExploitationWeb SecurityLearning & EducationLabs & Practice
GitHubmeng-security/spring4shell-local-verification-lab

spring4shell-local-verification-lab

Spring Framework CVE-2022-22965 本地影响条件验证、版本升级修复与复测项目

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt
il y a 1 moisPas encore vérifié

Projet de vérification, correction et re-test des conditions d'impact locales de Spring4Shell

Présentation du projet

Ce projet permet d'apprendre et de valider la vulnérabilité CVE-2022-22965 du framework Spring, également connue sous le nom de Spring4Shell, en ce qui concerne les conditions d'impact, les manifestations de risque, les méthodes de correction et le processus de re-test après correction.

Le projet a été réalisé dans un environnement local autorisé et mis en place personnellement. L'accent n'est pas mis sur l'attaque de cibles réelles, mais sur la construction d'environnements de test Spring MVC avant et après correction, la vérification point par point des conditions d'impact liées à la vulnérabilité, et l'observation sécurisée et en lecture seule des différences dans les chemins de propriétés internes du binding de données Spring avant et après la mise à niveau de version.

Ce projet a réalisé les étapes suivantes :

  • Préparation de l'environnement JDK, Maven et Apache Tomcat
  • Construction du projet WAR Spring MVC
  • Validation de base des fonctionnalités normales
  • Confirmation des conditions d'impact de la vulnérabilité
  • Diagnostic en lecture seule des chemins de propriétés internes
  • Analyse des causes de la vulnérabilité
  • Mise à niveau de la version du framework Spring
  • Re-test de sécurité après correction
  • Re-test des fonctionnalités normales après correction
  • Rapport de test et organisation des preuves par captures d'écran

Déclaration de sécurité

Ce projet est destiné uniquement à un environnement local personnel ou à un environnement de test de sécurité explicitement autorisé.

Le projet n'effectue aucune analyse, détection ou exploitation de vulnérabilité sur des sites web publics, serveurs ou systèmes métier tiers, et ne contient aucune donnée utilisateur réelle ni donnée métier réelle.

Pendant le test, les opérations suivantes n'ont pas été effectuées :

  • Aucun WebShell n'a été écrit
  • Aucune commande système n'a été exécutée
  • Aucune configuration Tomcat n'a été modifiée
  • Aucun shell inverse n'a été établi
  • Aucun contrôle persistant n'a été mis en place
  • Aucun impact n'a été causé sur un système externe

Il est interdit d'utiliser les méthodes de test de ce projet sur une cible non autorisée.

Contexte de la vulnérabilité

CVE-2022-22965, communément appelée Spring4Shell, est une vulnérabilité d'exécution de code à distance liée au mécanisme de liaison de données (data binding) des paramètres de requête dans le framework Spring.

Spring MVC permet de lier automatiquement les paramètres de requête HTTP aux propriétés des objets Java. Par exemple, ce projet reçoit les paramètres de nom et d'email via :

@ModelAttribute("profile") UserProfile profile

Normalement, les paramètres de requête name et email sont liés à l'objet UserProfile en fonction du nom de la propriété.

Dans les versions affectées, les restrictions d'accès à certains chemins de propriétés internes ne sont pas assez strictes. Lorsque l'on utilise JDK 9 ou une version ultérieure et que des conditions spécifiques de conteneur Servlet, de mode de déploiement et de liaison de données sont remplies, les paramètres de requête externes peuvent suivre l'objet métier normal pour accéder à des objets internes liés à la classe Java, au module, au chargeur de classe ou au conteneur.

Dans un environnement exploitable particulier, un attaquant pourrait modifier la configuration du serveur ou écrire des fichiers sur le serveur, créant ainsi un risque d'exécution de code à distance.

Ce projet n'effectue pas d'exploitation de code à distance complète, mais utilise le chemin de propriété suivant pour un diagnostic de différence sécurisé et en lecture seule :

class.module.name

Objectifs du projet

  1. Comprendre le processus de base de la liaison de données des paramètres de requête Spring MVC.
  2. Construire un projet de test Spring MVC WAR local.
  3. Effectuer une validation de base des fonctionnalités métier normales.
  4. Confirmer les conditions d'impact telles que le framework Spring, JDK, Tomcat, le déploiement WAR et le point d'entrée de la liaison de données.
  5. Observer en lecture seule les performances d'accès aux chemins de propriétés internes.
  6. Analyser les principales causes de la vulnérabilité.
  7. Mettre à niveau le framework Spring vers une version corrigée.
  8. Effectuer un re-test après correction en utilisant la même méthode.
  9. Confirmer que la mise à niveau de version n'a pas affecté les fonctionnalités métier normales.
  10. Organiser le code source du projet, le rapport de test et les preuves par captures d'écran.

Environnement expérimental

Ce projet a été réalisé dans un environnement expérimental isolé sur VMware local.

  • Hôte : Windows 11
  • Machine cible : Machine virtuelle Windows 10
  • Logiciel de virtualisation : VMware Workstation
  • Environnement Java : Eclipse Temurin JDK 11.0.31
  • Outil de construction de projet : Apache Maven 3.9.16
  • Conteneur Servlet : Apache Tomcat 9.0.60
  • Version du framework Spring avant correction : 5.3.17
  • Version du framework Spring après correction : 5.3.18
  • Framework Web : Spring MVC
  • Mode de déploiement du projet : Déploiement traditionnel par fichier WAR
  • Adresse de test : 127.0.0.1

Données de test des fonctionnalités normales :

  • Nom : Alice
  • Email : [email protected]

Chemin de propriété pour le diagnostic de sécurité :

class.module.name

Structure du projet

spring4shell-local-verification-lab/

  • README.md : Présentation du projet, approche de test, résultats de validation et explications de correction
  • docs/ : Rapport de vérification des conditions d'impact locales de Spring4Shell, correction et re-test
  • images/ : Captures d'écran de l'environnement du projet, du processus de test et du re-test
  • vulnerable-demo/ : Projet avant correction utilisant Spring Framework 5.3.17
  • fixed-demo/ : Projet après correction utilisant Spring Framework 5.3.18
  • notes/ : Notes d'apprentissage et enregistrement du processus

Structure principale du code source :

  • config/ : Classes de configuration Spring MVC et classe d'initialisation de l'application
  • controller/ : Contrôleur de traitement de formulaire et de diagnostic de chemin de propriété
  • model/ : Classe UserProfile pour recevoir les paramètres de nom et d'email
  • WEB-INF/views/ : Pages JSP pour la page d'accueil, le résultat de soumission et le résultat de diagnostic

Description du projet de test

Ce projet a créé deux applications Spring MVC, l'une avant correction et l'autre après correction.

Projet avant correction

Répertoire du projet :

vulnerable-demo

Version utilisée :

Spring Framework 5.3.17

Fichier WAR généré :

spring4shell-vulnerable-demo.war

Adresse d'accès :

http://127.0.0.1:8080/spring4shell-vulnerable-demo/

Page de diagnostic :

http://127.0.0.1:8080/spring4shell-vulnerable-demo/binding-probe

Projet après correction

Répertoire du projet :

fixed-demo

Version utilisée :

Spring Framework 5.3.18

Fichier WAR généré :

spring4shell-fixed-demo.war

Adresse d'accès :

http://127.0.0.1:8080/spring4shell-fixed-demo/

Page de diagnostic :

http://127.0.0.1:8080/spring4shell-fixed-demo/binding-probe

Description des fonctionnalités normales

Le projet de test fournit un simple formulaire de profil utilisateur, comprenant :

  • Champ de saisie du nom
  • Champ de saisie de l'email
  • Bouton de soumission du profil

Le contrôleur reçoit les paramètres de requête via :

@ModelAttribute("profile") UserProfile profile

Lorsque l'utilisateur soumet le nom et l'email, Spring MVC lie automatiquement les paramètres name et email à l'objet UserProfile.

La page de résultat lit l'objet lié et affiche le nom et l'email soumis par l'utilisateur.

Cette fonction permet de confirmer que le projet fonctionne correctement et prouve qu'il existe un point d'entrée de liaison de données de requête Spring MVC valide dans l'application.

Approche de test

Ce projet suit l'approche « d'abord confirmer les fonctionnalités normales, puis confirmer les conditions d'impact, ensuite effectuer un diagnostic de risque en lecture seule, enfin corriger et retester ».

  1. Installer et configurer JDK 11, Maven et Apache Tomcat.
  2. Construire un projet Spring MVC avec Spring Framework 5.3.17.
  3. Créer un formulaire de nom et d'email.
  4. Lier les paramètres de requête à l'objet UserProfile en utilisant @ModelAttribute.
  5. Empaqueter le projet en fichier WAR avec Maven.
  6. Déployer le fichier WAR sur Apache Tomcat en cours d'exécution.
  7. Soumettre des données de profil utilisateur simulées localement pour effectuer une validation de base des fonctionnalités normales.
  8. Vérifier le JDK, Tomcat, le framework Spring et le mode de déploiement réellement utilisés.
  9. Utiliser BeanWrapper de Spring pour effectuer un diagnostic en lecture seule de class.module.name.
  10. Enregistrer les résultats d'accès au chemin de propriété dans l'environnement Spring Framework 5.3.17.
  11. Mettre à niveau le framework Spring vers 5.3.18.
  12. Reconstruire et déployer le projet après correction.
  13. Effectuer un re-test après correction en utilisant le même chemin de propriété.
  14. Soumettre à nouveau le nom et l'email pour confirmer que les fonctionnalités normales ne sont pas affectées.

Confirmation des conditions d'impact

Ce projet a vérifié point par point les conditions d'impact suivantes :

  • Utilisation de JDK 11.0.31, satisfaisant la condition JDK 9 ou version ultérieure
  • Utilisation de Spring Framework 5.3.17
  • Le projet inclut le composant spring-webmvc
  • Utilisation d'Apache Tomcat 9.0.60
  • Le projet est déployé sous forme de fichier WAR traditionnel
  • Le projet est chargé par Tomcat en cours d'exécution
  • Le contrôleur a un point d'entrée de liaison de données basé sur @ModelAttribute

Les dépendances Spring réellement déployées dans le projet avant correction incluent :

  • spring-beans-5.3.17.jar
  • spring-core-5.3.17.jar
  • spring-web-5.3.17.jar
  • spring-webmvc-5.3.17.jar

Ce projet ne juge pas directement si la vulnérabilité est présente uniquement en fonction de la version du framework Spring, mais effectue une analyse complète en combinant JDK, Spring MVC, Tomcat, le déploiement WAR et le point d'entrée de liaison de données.

Méthode de diagnostic de risque

Pour éviter d'effectuer une exploitation destructive de la vulnérabilité, ce projet utilise BeanWrapper fourni par Spring Framework pour effectuer une vérification en lecture seule du chemin de propriété suivant :

class.module.name

Ce chemin représente :

  • class : accéder à l'objet Java Class correspondant à l'objet métier courant
  • module : accéder au module Java auquel appartient cette classe
  • name : lire le nom du module

Le processus de diagnostic n'appelle que les méthodes de vérification de lisibilité de la propriété et de lecture de la valeur de la propriété :

  • Aucune définition de propriété d'objet
  • Aucune modification de la configuration du serveur
  • Aucun fichier écrit sur le serveur
  • Aucune commande du système d'exploitation exécutée

Par conséquent, ce diagnostic ne peut être utilisé que pour observer les différences d'accès au chemin de propriété interne avant et après correction, et ne peut pas prouver à lui seul qu'une exécution de code à distance a été réalisée.

Résultats de validation

Résultats avant correction

L'environnement avant correction utilise :

Spring Framework 5.3.17

Chemin de propriété vérifié :

class.module.name

Résultat du diagnostic :

  • Peut être lu : true
  • Résultat de la lecture : null

true indique que l'environnement peut continuer à analyser module.name en suivant la propriété class de l'objet métier normal.

Le résultat de la lecture est null car l'application WAR fonctionne dans le module non nommé de Java, le nom du module étant vide. Cela ne signifie pas que la lecture du chemin de propriété a échoué.

Résultats après correction

L'environnement après correction utilise :

Spring Framework 5.3.18

Même chemin de propriété pour le nouveau diagnostic :

class.module.name

Résultat du diagnostic :

  • Peut être lu : false
  • Résultat de la lecture : Not readable

Les résultats avant et après correction forment un contraste clair :

  • Spring Framework 5.3.17 : le chemin de propriété peut être lu
  • Spring Framework 5.3.18 : le chemin de propriété ne peut pas être lu

Ce résultat montre qu'après la mise à niveau de version, l'accès au chemin de propriété de diagnostic d'origine a été restreint et que la manifestation de risque observée avant correction n'apparaît plus.

Mesures de correction

Ce projet a adopté une correction par mise à niveau de la version du framework Spring.

Configuration avant correction :

<spring.version>5.3.17</spring.version>

Configuration après correction :

<spring.version>5.3.18</spring.version>

Les opérations suivantes ont été effectuées pendant le processus de correction :

  1. Copier le projet avant correction dans fixed-demo.
  2. Conserver la logique métier du contrôleur, du modèle de données et des pages JSP inchangée.
  3. Mettre à niveau le framework Spring de 5.3.17 à 5.3.18.
  4. Utiliser Maven pour télécharger à nouveau les dépendances de la version corrigée.
  5. Recompiler et générer le fichier WAR de la version corrigée.
  6. Déployer le fichier WAR de la version corrigée sur Apache Tomcat.
  7. Vérifier les versions des JAR Spring réellement déployées dans le projet corrigé.
  8. Effectuer un re-test de sécurité en utilisant le chemin de propriété d'origine.
  9. Tester à nouveau la fonction de soumission du nom et de l'email.

Les dépendances Spring réellement déployées dans le projet après correction incluent :

  • spring-beans-5.3.18.jar
  • spring-core-5.3.18.jar
  • spring-web-5.3.18.jar
  • spring-webmvc-5.3.18.jar

Ce résultat prouve que la version corrigée a été reconstruite et réellement déployée, et non seulement que le numéro de version a été modifié dans pom.xml.

Re-test des fonctionnalités normales après correction

Après la mise à niveau vers Spring Framework 5.3.18, accédez à nouveau à la page d'accueil du projet corrigé et soumettez les données de test suivantes :

  • Nom : Alice
  • Email : [email protected]

Après soumission, la page affiche toujours normalement :

  • Profil utilisateur soumis avec succès
  • Nom : Alice
  • Email : [email protected]

Ce résultat montre que la mise à niveau de version n'a pas affecté la fonction normale de liaison des paramètres de requête et d'affichage de la page du projet d'origine.

Causes de la vulnérabilité

Le mécanisme de liaison automatique des données de Spring MVC peut accéder aux propriétés des objets Java en fonction du nom des paramètres de requête HTTP.

Les paramètres métier normaux name et email n'ont besoin d'accéder qu'aux propriétés normales correspondantes dans UserProfile.

Cependant, le mécanisme d'accès aux propriétés de Spring prend également en charge les chemins de propriétés imbriqués avec des points. Dans les versions affectées, les restrictions d'accès à certains chemins de propriétés internes ne sont pas assez strictes, ce qui permet aux paramètres externes, dans un environnement spécifique, de passer de l'objet métier normal aux objets liés à la classe Java, au module, au chargeur de classe ou au conteneur Servlet.

Lorsque ces objets internes possèdent des propriétés inscriptibles qui peuvent affecter la configuration du serveur ou le système de fichiers, et que l'application remplit simultanément les conditions JDK, Tomcat, déploiement WAR et liaison de données, un risque d'exécution de code à distance peut se former.

Cette vulnérabilité n'est pas due à un problème avec les propriétés name ou email elles-mêmes, et tous les projets utilisant Spring MVC ne sont pas nécessairement exploitables. La présence de la vulnérabilité nécessite généralement la coexistence de plusieurs conditions.

Recommandations de correction

Dans les systèmes métier réels, il est recommandé de prendre les mesures suivantes :

  • Vérifier les versions réellement utilisées du framework Spring et de Spring Boot
  • Prioriser la mise à niveau vers une version de sécurité toujours prise en charge officiellement
  • Reconstruire et déployer l'application après la mise à niveau
  • Vérifier les versions réelles des JAR Spring dans le package de déploiement final
  • Limiter la portée de la liaison de données du contrôleur
  • Autoriser uniquement la liaison des champs nécessaires au métier
  • Utiliser un objet de données de requête dédié pour recevoir les paramètres externes
  • Éviter d'exposer directement les entités de base de données ou les objets internes complexes aux paramètres externes
  • Ne pas se fier uniquement à la validation côté frontend pour les restrictions de sécurité
  • Prendre des mesures d'atténuation temporaires pour les systèmes qui ne peuvent pas être mis à niveau immédiatement
  • Les mesures d'atténuation temporaires ne remplacent pas une mise à niveau de version officielle
  • Exécuter les services Tomcat et Java avec un compte à faibles privilèges
  • Définir les autorisations minimales nécessaires pour les répertoires d'application et de configuration
  • Surveiller les paramètres de requête anormaux et les modifications de fichiers sur le serveur
  • Effectuer à la fois un re-test de sécurité et un re-test des fonctionnalités métier normales après correction

Preuves par captures d'écran clés

Environnement et déploiement

Confirmation de la version JDK 11

Confirmation de la version Maven

Démarrage réussi d'Apache Tomcat 9.0.60

Empaquetage Maven réussi

Déploiement réussi du projet WAR

Base de fonctionnalités normales

Accès normal à la page d'accueil du projet de test

Validation de base des fonctionnalités normales réussie

Validation avant correction

Confirmation des dépendances Spring Framework 5.3.17

Chemin de propriété interne lisible avant correction

Correction et re-test

Empaquetage réussi de la version corrigée

Chemin de propriété interne illisible après correction

Re-test des fonctionnalités normales après correction réussi

Confirmation des dépendances Spring Framework 5.3.18 après correction

Progression actuelle

  • Création du répertoire du projet
  • Rédaction du README
  • Création du rapport de test
  • Préparation de l'environnement JDK, Maven et Tomcat
  • Construction du projet de test Spring MVC
  • Empaquetage et déploiement du projet WAR terminés
  • Validation de base des fonctionnalités normales terminée
  • Confirmation des conditions d'impact de la vulnérabilité terminée
  • Diagnostic local de risque en lecture seule terminé
  • Analyse des causes de la vulnérabilité terminée
  • Mise à niveau de la version du framework Spring terminée
  • Re-test de sécurité après correction terminé
  • Re-test des fonctionnalités normales après correction terminé
  • Confirmation des versions de dépendances réelles après correction
  • Organisation du rapport de test et des preuves par captures d'écran

Résumé du projet

Ce projet a réalisé dans un environnement local isolé la confirmation des conditions d'impact, le diagnostic des manifestations de risque, la correction par mise à niveau de version et le re-test après correction de la vulnérabilité CVE-2022-22965 du framework Spring.

Le projet avant correction utilisait Spring Framework 5.3.17. Dans l'environnement JDK 11, Spring MVC, Apache Tomcat 9.0.60 et le déploiement WAR traditionnel, le chemin de propriété class.module.name a été jugé lisible.

Le projet après correction a mis à niveau le framework Spring vers 5.3.18. Le même chemin de propriété est devenu illisible, tandis que la fonction normale de liaison des données du nom et de l'email reste utilisable.

Ce projet n'a pas effectué d'exploitation de code à distance complète, mais a réalisé une validation des différences avant et après correction via une méthode sécurisée et contrôlée en lecture seule.

Le projet met en évidence les capacités suivantes :

  • Configuration d'environnement de base Java et Spring MVC
  • Construction de projet Maven
  • Déploiement d'application WAR sur Tomcat
  • Compréhension du mécanisme de liaison de données Spring
  • Analyse des conditions d'impact de la vulnérabilité
  • Conception de processus de test de sécurité
  • Mise à niveau de version de composant
  • Re-test après correction
  • Test de régression des fonctionnalités normales
  • Rédaction de rapport de test de sécurité
  • Organisation de captures d'écran et de projet GitHub
Télécharger l’outil