CVE-2026-90979 in Karaf
Zusammenfassung
von VulDB • 29.09.2026
LDAPCache und LDAPBackingEngine erstellen LDAP-Suchfilter für die Benutzersuche (user lookup) und Rollensuche (role lookup), indem sie die Platzhalter %u, %dn und %fqdn (abgeleitet aus dem Anmeldenamen, der aufgelösten Benutzer-DN und deren vollständig qualifizierter Namespace-Form) durch textuelle Ersetzung in von Administratoren konfigurierte Filtervorlagen (userFilter, roleFilter) einsetzen. Vor der Korrektur bestand die einzige auf den ersetzten Wert angewandte Sanitization darin, dass Backslashes verdoppelt wurden:
filter = filter.replaceAll(Pattern.quote("%u"), Matcher.quoteReplacement(user));
filter = filter.replace("\\", "\\\\");
Dies entzieht nicht anderen Zeichen den RFC 4515 in einem LDAP-Suchfilter erforderlichen Escape-Status: *, (, ), und NUL. Ein Anmeldename, der eines dieser Zeichen enthält, kann die Struktur des resultierenden Filters verändern, anstatt als Literalwert abgeglichen zu werden (z. B. kann ein speziell angefertigter Benutzername einen Gleichheitsabgleich in einen Wildcard-Abgleich umwandeln oder Filterklauseln schließen/wieder öffnen), wodurch das Suchergebnis erweitert wird und potenziell dazu führt, dass eine Anmeldung oder Rollensuche ein anderes LDAP-Eintrag als den beabsichtigten trifft, was zu einer übermäßigen Zuweisung von Rollen führt. Abhängig von bereitstellungsspezifischen Filtervorlagen kann dies zudem beeinflussen, auf welches Konto sich die Anmeldung auflöst.
Die Schwachstelle ist nicht über jeden Einstiegspunkt ausnutzbar: LDAPLoginModule und LDAPPubkeyLoginModule rufen beide Util.doRFC2254Encoding() (korrektes RFC 4515-Escaping) für den Anmeldenamen auf, bevor sie ihn an LDAPCache weitergeben, was das fehlende Escaping in LDAPCache für diese beiden Aufrufpfade maskiert. Die direkte Verwendung von LDAPCache (unter Umgehung der Login-Module) reproduziert sich aufgrund dessen nicht über den normalen Authentifizierungsfluss von LDAPLoginModule/LDAPPubkeyLoginModule. Sie tritt jedoch über zwei andere Aufrufpfade auf, die ohne vorheriges Escaping zu LDAPCache/LDAPBackingEngine führen:
* GSSAPILdapLoginModule übergibt den Namen aus dem NameCallback unverändert und unescaped weiter. * LDAPBackingEngine (listRoles) übergibt principal.getName() unverändert und unescaped weiter.
If you want to get best quality of vulnerability data, you may have to visit VulDB.