
Analysiert CVE-2025-60423, eine Authentifizierungsumgehung in JEECG-Versionen 7.2.8 und 7.2.9, und beschreibt Pfad-Traversal- und URL-Encoding-Techniken, um Filter zu umgehen und auf geschützte Endpunkte zuzugreifen.
Diese Authentifizierungsumgehung ähnelt der Berechtigungsumgehung von Shiro.
In der Methode dofilterInternal der Klasse sessionfilter ist der Standardwert des Parameters dofilter true. Nur wenn dieser false ist, wird die Authentifizierung umgangen.
Wenn man der matches-Methode folgt, sieht man, dass dieser Code die URL mit den 134 Pfadzeichenfolgen in patterns abgleicht. Wenn die Übereinstimmung erfolgreich ist, wird true zurückgegeben, wodurch dofilter auf gesetzt werden kann.
Dann debuggt man weiter, bis die Schleife in die Bedingungsprüfung eintreten kann. Zu diesem Zeitpunkt ist das Muster .
true
/static.*?
/static.*?:
Dies ist ein nicht-gieriger regulärer Ausdruck, der Zeichenfolgen abgleicht, die mit /static beginnen und danach beliebige Zeichen (einschließlich /, . usw.) enthalten (.*? bedeutet beliebige Zeichen abgleichen, der nicht-gierige Modus beeinflusst nur die Übereinstimmungslänge, nicht ob eine Übereinstimmung vorliegt)./static/../je/saas/saasYh/getInfoById Diese Zeichenfolge beginnt eindeutig mit /static, und der nachfolgende Inhalt enthält /../je/..., was dem Übereinstimmungsbereich von /static.*? entspricht.Man muss also nur /static/.. vor einen beliebigen Backend-Verzeichnispfad setzen, um die Authentifizierung zu umgehen.
Eigentlich funktioniert hier nicht nur /static/... In patterns kann alles umgangen werden, was ein einstufiger Pfad ist und danach .*? enthält.
Beispiel:
/error/.*?
/adminseal.zz/.*?
/dwr/.*?
...
Ich habe nicht alle gefunden, aber alles, was dieser Regel entspricht, funktioniert.
In der neuen Version 7.2.9 wurde ein zusätzlicher Schritt zur URL-Überprüfung hinzugefügt.

Wenn man in checkErrorUrl hineingeht, stellt man fest, dass geprüft wird, ob .. vorhanden ist.

In Kombination mit den Umgehungsansätzen der Shiro-CVEs wird .. einmal URL-kodiert, um die Umgehung erfolgreich durchzuführen.
Payload:
POST /static/%2e%2e/je/sysConfig/sysConfig/loadSysVariables HTTP/1.1 1
Offenlegung von unverschlüsselten Passwörtern auf der Webseite.
