
Une application Spring MVC ou Spring WebFlux fonctionnant sur JDK 9+ peut être vulnérable à une exécution de code à distance (RCE) via la liaison de données. L'exploit spécifique nécessite que l'application s'exécute sur Tomcat en tant que déploiement WAR. Si l'application est déployée sous forme d'un jar exécutable Spring Boot, c'est-à-dire le mode par défaut, elle n'est pas vulnérable à cet exploit. Cependant, la nature de la vulnérabilité est plus générale, et d'autres moyens de l'exploiter peuvent exister.
La vulnérabilité CVE-2022-22965 (Spring4Shell, SpringShell) est une faille du framework Spring qui utilise la fonctionnalité de liaison de données (data binding) pour lier des données stockées dans une requête HTTP à certains objets utilisés par une application. Le bogue se situe dans la méthode getCachedIntrospectionResults, qui peut être utilisée pour obtenir un accès non autorisé à ces objets en transmettant leurs noms de classe via une requête HTTP. Cela crée des risques de fuite de données et d'exécution de code à distance lorsque des classes d'objets spéciales sont utilisées. Cette vulnérabilité est similaire à la CVE-2010-1622, fermée depuis longtemps, où des vérifications de noms de classe avaient été ajoutées comme correctif afin que le nom ne corresponde pas à classLoader ou protectionDomain.
Selon le système CVSSv3, la sévérité est CRITIQUE.
Vous trouverez ci-dessous des opportunités de détection de la CVE-2022-22965 qui peuvent être utilisées pour identifier la vulnérabilité.
Les conditions de la vulnérabilité (telles que mentionnées dans l'annonce de Spring concernant la vulnérabilité) peuvent être résumées comme suit :
python3 exploit.py http://10.10.10.10/
Remarque : la barre oblique finale est très importante ici !
Recherchez l'« action » du formulaire de contact (la seule requête POST à notre disposition).
<form id="contactForm" action="/" method="post">
L'action est « / », ce qui signifie que notre URL cible sera simplement : http://10.10.10.10/