Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
shiro-cve-2020-17523 — Analyse de deux techniques de contournement de l'authentification pour Apache Shiro (CVE-2020-17523), avec un environnement d'exploitation reproductible et un examen détaillé de la cause racine. | Kitploit
Outils/GitHubGitHub/jweny/shiro-cve-2020-17523
Authentification et AutorisationAnalyse des VulnérabilitésExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubjweny/shiro-cve-2020-17523

shiro-cve-2020-17523

Analyse de deux techniques de contournement de l'authentification pour Apache Shiro (CVE-2020-17523), avec un environnement d'exploitation reproductible et un examen détaillé de la cause racine.

Voir le dépôt
1181128il y a 5 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Analyse des contournements d'authentification Apache Shiro (CVE-2020-17523)

0x01 Description de la vulnérabilité

Apache Shiro est un framework de sécurité Java puissant et facile à utiliser, qui assure l'authentification, l'autorisation, la gestion des mots de passe et des sessions. Grâce à l'API intuitive de Shiro, vous pouvez sécuriser rapidement et facilement toute application, de la plus petite application mobile aux plus grands réseaux et applications d'entreprise.

Lorsqu'il est utilisé avec Spring, sous certaines règles de correspondance des permissions, un attaquant peut contourner l'authentification en construisant des requêtes HTTP spéciales.

Versions concernées : Apache Shiro < 1.7.1

0x02 Mise en place de l'environnement de test

Shiro 1.7.0

https://github.com/jweny/shiro-cve-2020-17523 Les environnements pour les deux méthodes de contournement ont été mis à jour.

0x03 Test POC

Méthode 1 :

http://127.0.0.1:8080/admin/%20 ou http://127.0.0.1:8080/admin/%20/

L'utilisation d'espaces ou de caractères blancs permet de contourner l'authentification Shiro.

image-20210205120522547

Méthode 2 :

Après avoir échangé avec le collègue p0desta, une autre méthode d'exploitation dans un scénario spécifique a été découverte.

http://127.0.0.1:8080/admin/%2e ou http://127.0.0.1:8080/admin/%2e/

Mais le . (ainsi que /) est traité comme un séparateur de chemin dans les règles de correspondance de Spring, donc il n'est pas considéré comme un caractère normal pour la correspondance. Dans les conditions par défaut, accéder à /admin/. renvoie une erreur 404.

Cependant, en mode chemin complet (setAlwaysUseFullPath(true)), la correspondance fonctionne normalement.

image-20210205102100797

0x04 Analyse de la vulnérabilité

Shiro obtient et compare l'URL dans org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver#getChain.

Regardons rapidement la méthode getChain :

carbon (2)

image-20210205103341569

Cette méthode vérifie d'abord si le requestURI se termine par /. Si c'est le cas, elle supprime le dernier /.

Ensuite, dans la boucle de correspondance du chemin, elle vérifie d'abord si le pattern pathPattern se termine par /. Si oui, elle supprime également ce dernier /. Puis elle appelle la méthode pathMatches() pour effectuer la correspondance du chemin.

Ainsi, dans les deux méthodes d'exploitation, le fait de se terminer par / ou non n'a pas d'importance, car il sera supprimé par la méthode getChain au début.

4.1 Analyse du contournement par espace

Regardons la méthode pathMatches() :

Ouvrons l'évaluateur et calculons respectivement pathMatches("/admin/*","/admin/1") et pathMatches("/admin/*","/admin/ "). La première correspond normalement, la seconde échoue.

image-20210203134044268

image-20210203134119174

Commençons le débogage. Après un long F7, arrivons à doMatch("/admin/*","/admin/ "). On voit que les pathDirs retournés par tokenizeToStringArray n'ont plus le deuxième niveau de répertoire. Par conséquent, /admin/* et /admin ne correspondent pas.

image-20210203150854085

Suivons la méthode tokenizeToStringArray. On constate que le paramètre trimTokens est à true lors de son appel.

image-20210203150959413

Dans la méthode tokenizeToStringArray, lorsque le paramètre trimTokens est à true, un traitement trim() est effectué, ce qui supprime les espaces. En retournant dans getChain, le dernier / est supprimé. Ainsi, pathDirs retourné par tokenizeToStringArray n'a pas de deuxième niveau.

image-20210203151053344

Résumé : Dans la version vulnérable de Shiro, le paramètre trimTokens de la méthode tokenizeToStringArray est par défaut à true ; les espaces sont supprimés par le traitement trim(). Cela entraîne la suppression du dernier / lors du retour à getChain, donc /admin ne correspond pas à /admin/*, ce qui contourne l'authentification. Pendant ce temps, Spring reçoit le chemin d'accès /admin/%20 et répond normalement, ce qui permet le contournement.

4.2 Analyse du contournement par /./

En voyant la deuxième méthode /./ et /., ne pensez-vous pas à une méthode familière ? Exactement, normalize().

carbon (3)

Traduisons brièvement :

ConditionExemple
Slash traité en antislash\ -> /
Double slash en slash// -> /
Se termine par /. ou /.., on ajoute / en fin/. -> /./ /.. -> /../
Normalisation de /.//./ -> /
Saut de chemin/aaa/../bbb -> /bbb

Ainsi, /admin/. est d'abord traité en /admin/./, puis devient /admin/.

image-20210205113301788

Après le traitement par org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver#getChain, comme il se termine par /, on supprime le dernier / et on obtient /admin. /admin ne correspond pas à /admin/*, ce qui contourne l'authentification Shiro.

image-20210205113518970

Pendant ce temps, Spring reçoit la requête /admin/.. Si le mode chemin complet n'est pas activé, dans Spring, . et / sont traités comme des séparateurs de chemin et ne participent pas à la correspondance. Par conséquent, le mapping n'est pas trouvé et une erreur 404 est renvoyée.

image-20210205114350972

En activant le mode chemin complet, l'URL entière est mise en correspondance, donc Spring renvoie 200.

Voici le code pour activer le mode chemin complet :

@SpringBootApplication
public class SpringbootShiroApplication extends SpringBootServletInitializer implements BeanPostProcessor {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringbootShiroApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(SpringbootShiroApplication.class, args);
    }
Télécharger l’outil