
Analyse CVE-2025-60423, un contournement d'authentification dans les versions 7.2.8 et 7.2.9 de JEECG, détaillant les techniques de traversée de chemin et d'encodage d'URL pour contourner les filtres et accéder aux points de terminaison protégés.
Ce contournement d'authentification est similaire au contournement de permissions de Shiro.
Dans la méthode dofilterInternal de la classe sessionfilter, le paramètre dofilter est true par défaut, et ce n'est que lorsqu'il est false que l'authentification peut être contournée.
En suivant la méthode matches, on voit que ce code fait correspondre l'URL avec les 134 chaînes de chemin dans patterns. Lorsque la correspondance réussit, il retourne true, ce qui permet de définir sur .
Ensuite, on débogue jusqu'à ce que la boucle puisse entrer dans la condition de jugement. À ce moment, le est .
dofiltertrue
pattern/static.*?
/static.*? :
Il s'agit d'une regex en mode non gourmand qui correspond à toute chaîne commençant par /static, suivie de n'importe quels caractères (y compris /, ., etc.) (.*? signifie correspondre à n'importe quels caractères, le mode non gourmand n'affecte que la longueur de la correspondance, pas le fait de correspondre ou non)./static/../je/saas/saasYh/getInfoById. Cette chaîne commence clairement par /static, et le contenu suivant inclut /../je/..., ce qui correspond à la plage de correspondance de /static.*?.Ainsi, il suffit d'ajouter /static/.. devant n'importe quel chemin de répertoire backend pour contourner l'authentification.
En fait, ce n'est pas seulement /static/.. qui fonctionne ici. Dans patterns, tout chemin à un seul niveau suivi de .*? peut être utilisé pour contourner l'authentification.
Exemple :
/error/.*?
/adminseal.zz/.*?
/dwr/.*?
...
Je ne les ai pas tous trouvés, mais tout ce qui correspond à cette règle fonctionne.
Dans la nouvelle version 7.2.9, une étape supplémentaire de vérification de l'URL a été ajoutée.

En suivant dans checkErrorUrl, on découvre qu'il vérifie la présence de ...

Toujours en combinant les idées de contournement des CVE de Shiro, on encode une fois .. en URL pour contourner avec succès.
Payload :
POST /static/%2e%2e/je/sysConfig/sysConfig/loadSysVariables HTTP/1.1 1
Divulgation des mots de passe non chiffrés côté web.
