Après la bibliothèque java Log4j, un vulnérabilité de type zero day concernant le framework java Spring a été identifié et un PoC d'exploit fonctionnel publié sur le web. D'ores et déjà baptisé Spring4Shell ou SpringShell, il est lié à une faille de type exécution de code malveillant à distance (RCE) dans le célèbre environnement de développement d'applications web Java modernes, Spring. A noter qu'elle n'a rien à voir avec une autre RCE publiée le 29 mars concernant Spring Cloud (CVE-2022-22963), pas plus qu'une précédente (28 mars) CVE-2022-22950 pouvant déboucher sur des attaques par déni de service sur les versions 5.3.0 à 5.3.15 de Spring Framework

La vuln Spring4Shell été révélée ce 30 mars par un chercheur en sécurité chinois ayant publié un PoC d'exploit basé sur le module Core de cet environnement open source Spring racheté en 2009 par VMware et adossé à Pivotal qui lui appartient pleinement depuis 2019. Mis en ligne avant d'être rapidement effacé, ce proof of concept a montré un vecteur d'attaque fonctionnel pour exécuter du code malveillant à distance par un attaquant non authentifié sur un système cible. Plusieurs chercheurs et analystes en sécurité dont Will Dormann analyste au CERT/CC ont pu confirmer que cet exploit Spring4Shell fonctionne bien et s'appuie sur la pile « Handling Form Submission » du framework. Il s'agit d'une méthode dans l'interface de programmation de modèle d'objet standard HTML DOM utilisée pour envoyer des données de formulaire à un serveur web.

Un exploit loin d'être généralisé mais sans correctif 

Le fournisseur de solutions de sécurité Rapid7 s'est toutefois montré prudent en indiquant qu'il existait beaucoup de confusion autour de cette révélation et que cette faille n'est pas exploitable sur des installations packagées (out of the box) de Spring. « Des PoC d'exploit existent, mais il est actuellement difficile de savoir quelles applications du monde réel utilisent cette fonctionnalité vulnérable. La configuration et la version JRE peuvent également constituer des facteurs importants de probabilité d'exploit généralisé ».

En attendant la disponibilité d'un correctif pour la faille Spring4Shell, le fournisseur Praetorian a de son côté poussé une mesure temporaire d'atténuation. Ce dernier recommande ainsi de créer un composant, partagé entre les contrôleurs Spring, ControllerAdvice et d'ajouter à la denylist des patterns dangereux comme celui-ci : import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.InitBinder; @ControllerAdvice @Order(10000) public class BinderControllerAdvice { @InitBinder public void setAllowedFields(WebDataBinder dataBinder) { String[] denylist = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"}; dataBinder.setDisallowedFields(denylist); } }