
Vulnérabilité Spring4Shell RCE - CVE-2022-22965
La vulnérabilité spring4shell a été nommée ainsi en raison de 2 vulnérabilités découvertes et largement exploitées par des attaquants au début de 2022. L'une de ces vulnérabilités se trouve dans le composant du framework appelé "Spring Cloud Functions" (moins critique) et une seconde, plus critique, se trouve au cœur du framework, appelée "Spring Core". Avec ces 2 vulnérabilités critiques, elle a généré une plaisanterie de la communauté en relation avec une autre vulnérabilité critique divulguée en 2021, appelée Log4shell.
L'une des fonctionnalités de Spring MVC est qu'il instancie et remplit automatiquement un objet d'une classe spécifiée lorsqu'une requête est effectuée sur la base des paramètres envoyés au endpoint. En termes simples, cela peut être abusé pour écraser des attributs importants de la classe parente, conduisant à une exécution de code à distance. La majorité des exploits pour la vulnérabilité Spring4Shell fonctionnent en forçant l'application à écrire un fichier .jsp malveillant sur le serveur web. Ce webshell peut ensuite être exécuté pour obtenir une exécution de commandes à distance sur la cible.
Pour que cette exploitation se produise, il est nécessaire de suivre une séquence de facteurs qui rendent l'environnement vulnérable à l'importation de ce fichier jsp ; ils sont :
spring-webmvc et/ou spring-webflux du Spring Framework.Pour cette exploration, nous utiliserons un script déjà créé à cet effet, appelé poc.py, attaché à ce même dépôt.
[!note]
Le script (poc.py) pour ce poc est disponible dans ce même dépôt, consultez-le ci-dessus.
Utilisez toujours l'aide du script lorsqu'elle est disponible, ce sera plus clair à comprendre.
Cette attaque nécessite une méthode http post pour pouvoir transmettre le fichier au serveur. Sur le serveur que nous attaquons, il y a un POST que nous pouvons trouver dans la vue source (view-source) de la page.
C'est une page simple où un e-mail est enregistré pour une notification.
dans view-source, nous trouvons le post de ce formulaire avec une action vers /.
Utilisons notre script pour explorer ce serveur web. Rappelons que nous devons exécuter l'attaque dans l'action POST, en l'occurrence à la racine /.
Le webshell a été envoyé avec succès ! Accédons au lien généré par le script pour confirmer l'exploitation.
Terminé ! Nous avons pu exploiter la vulnérabilité en envoyant un webshell au serveur web.
Pour remédier à Spring4Shell, assurez-vous d'utiliser une version de Spring publiée après le patch 18 de la version mineure 5.3 (c'est-à-dire après 5.3.18), ou après le patch 20 si vous utilisez la version mineure 5.2 (c'est-à-dire après 5.2.20). Mettre à niveau la version du framework suffit pour supprimer la vulnérabilité de vos applications.