CVE-2022-22978-demo
Code d'exemple de la vulnérabilité CVE-2022-22978
Conditions d'exploitation
Bien que classée comme critique, les conditions d'exploitation sont plutôt restrictives. Personnellement, je trouve cette vulnérabilité un peu inutile.
- Tout d'abord, spring-security doit être dans la plage affectée par la vulnérabilité.
- Ensuite, il faut utiliser le matcher regex de spring-security (regexMatchers) ou directement RegexRequestMatcher, et utiliser
. pour faire correspondre le chemin, comme ceci :
- regexMatcher("/api/.*") // permet tous les sous-chemins sous /api
- regexMatcher("/files/.*\.jpg") // correspond à toutes les requêtes de fichiers se terminant par .jpg
- regexMatcher("/user/.*/profile") // permet le chemin profile de n'importe quel nom d'utilisateur sous /user
- En réalité, cette situation est rare. Par exemple, avec regexMatcher("/api/.*"), il faut aussi avoir un contrôleur annoté avec @RequestMapping("/api/*") pour traiter toutes les requêtes sous /api. Sinon, même si on contourne les règles de correspondance de chemin de spring-security avec
%0a%0d, on obtient une erreur 404.
Démonstration d'exploitation
En accédant normalement à tous les chemins, on est redirigé vers la page de connexion par défaut fournie par spring-security.

Accès : http://127.0.0.1:8080/admin/admin%0a, contournement de la connexion réussi.

Accès : http://127.0.0.1:8080/hello%0a
Il contourne la vérification de sécurité qui exige une connexion pour tous les chemins, mais comme il n'y a pas de contrôleur annoté avec @RequestMapping("/hello/*"), le mappage échoue et renvoie une erreur 404.
