Spring4Shell - PoC
CVE - 2022 - 22965
Versions concernées :
- Versions du framework Spring de 5.3.0 à 5.3.17, de 5.2.0 à 5.2.19 et versions antérieures
- Java JDK 9
- Versions d'Apache Tomcat inférieures à 10.0.20, 9.0.62 et 8.5.78
- Les applications empaquetées en WAR traditionnel avec une dépendance spring-webmvc ou spring-webflux et déployées sur un conteneur Servlet autonome sont concernées
Description
- Le problème peut être élevé par manipulation du classLoader
- Une liaison de données incorrecte utilisée pour remplir un objet à partir des paramètres de requête (annotation Request Mapping) provoque cette vulnérabilité
- Les attaquants peuvent charger des classes arbitraires et injecter du code arbitraire qui peut être exécuté par l'application
- Une vulnérabilité similaire (CVE-2010-1622) avait été divulguée auparavant et des correctifs ont été appliqués pour restreindre
class.classLoader et class.protectionDomain
- Mais JDK9 a introduit une nouvelle méthode
class.getMethod(), qui contourne cette restriction en utilisant class.module.classLoader pour accéder à n'importe quelle propriété enfant de l'objet class
Impact
- L'exploitation réussie de cette vulnérabilité peut conduire à l'exécution de code arbitraire sur la machine vulnérable.
Application de test
docker build . -t spring4shell-poc-app
Sinon, récupérez l'image docker depuis [gokul2/spring4shell-poc]
docker pull gokul2/spring4shell-poc-app
docker run -p 8080:8080 spring4shell-poc-app
- L'application sera maintenant disponible à l'adresse localhost:8080.
- Exécutez le fichier exploit.py