CVE-2026-90979: CWE-90 Improper neutralization of special elements used in an LDAP query ('LDAP injection') in Apache Software Foundation Apache Karaf
LDAPCache and LDAPBackingEngine build LDAP search filters for user lookup and role lookup by textually substituting the placeholders %u, %dn, and %fqdn (drawn from the login name, the resolved user DN, and its fully qualified namespace form) into administrator-configured filter templates (userFilter, roleFilter). Before the fix, the only sanitization applied to the substituted value was double backslashed: filter = filter.replaceAll(Pattern.quote("%u"), Matcher.quoteReplacement(user)); filter = filter.replace("\\", "\\\\"); This does not escape the other characters RFC 4515 requires escaping in an LDAP search filter: *, (, ), and NUL. A login name containing any of these can change the structure of the resulting filter rather than being matched as a literal value (e.g. a crafted username can turn an equality match into a wildcard match, or close/reopen filter clauses), widening what the search returns and potentially causing a login or role lookup to match an LDAP entry other than the intended one, over-granting roles, and depending on deployment-specific filter templates, potentially affecting which account a login resolved to. It's not exploitable through every entry points: LDAPLoginModule and LDAPPubkeyLoginModule both called Util.doRFC2254Encoding() (correct RFC 4515 escaping) on the login name before handing it to LDAPCache, which masked the missing escaping in LDAPCache for those two call paths. Using LDAPCache directly (bypassing the login modules) does not reproduce through the normal LDAPLoginModule/LDAPPubkeyLoginModule authentication flow for this reason. It does reproduce through two other call paths that reach LDAPCache/LDAPBackingEngine without any prior escaping: * GSSAPILdapLoginModule passes the NameCallback name straight through, unescaped. * LDAPBackingEngine (listRoles) passes principal.getName() straight through, unescaped.
AI Analysis
Technical Summary
Apache Karaf's LDAPCache and LDAPBackingEngine build LDAP search filters by substituting placeholders (%u, %dn, %fqdn) with user input. Prior to version 4.4.12, the only sanitization applied was double backslash escaping, which does not cover all special characters that must be escaped in LDAP filters per RFC 4515 (notably '*', '(', ')', and NUL). This allows crafted input containing these characters to manipulate the LDAP filter structure, potentially causing broader matches than intended, over-granting roles, or incorrect user account resolution. While LDAPLoginModule and LDAPPubkeyLoginModule apply correct escaping and thus mitigate this issue, GSSAPILdapLoginModule and LDAPBackingEngine's listRoles method do not, making those paths vulnerable.
Potential Impact
An attacker able to supply specially crafted input to vulnerable call paths can manipulate LDAP queries, potentially causing authentication or authorization bypasses. This may result in over-granting of roles or incorrect user account resolution, depending on deployment-specific filter templates. The impact is limited to the affected modules that do not perform proper escaping and does not affect all authentication flows.
Mitigation Recommendations
A fix is available in Apache Karaf version 4.4.12 and later, which properly escapes all special LDAP characters according to RFC 4515. Users should upgrade to version 4.4.12 or later to remediate this vulnerability. Until upgraded, avoid using vulnerable call paths such as GSSAPILdapLoginModule and LDAPBackingEngine's listRoles method with untrusted input. Patch status is confirmed by the vendor advisory indicating the fix in 4.4.12.
CVE-2026-90979: CWE-90 Improper neutralization of special elements used in an LDAP query ('LDAP injection') in Apache Software Foundation Apache Karaf
Description
LDAPCache and LDAPBackingEngine build LDAP search filters for user lookup and role lookup by textually substituting the placeholders %u, %dn, and %fqdn (drawn from the login name, the resolved user DN, and its fully qualified namespace form) into administrator-configured filter templates (userFilter, roleFilter). Before the fix, the only sanitization applied to the substituted value was double backslashed: filter = filter.replaceAll(Pattern.quote("%u"), Matcher.quoteReplacement(user)); filter = filter.replace("\\", "\\\\"); This does not escape the other characters RFC 4515 requires escaping in an LDAP search filter: *, (, ), and NUL. A login name containing any of these can change the structure of the resulting filter rather than being matched as a literal value (e.g. a crafted username can turn an equality match into a wildcard match, or close/reopen filter clauses), widening what the search returns and potentially causing a login or role lookup to match an LDAP entry other than the intended one, over-granting roles, and depending on deployment-specific filter templates, potentially affecting which account a login resolved to. It's not exploitable through every entry points: LDAPLoginModule and LDAPPubkeyLoginModule both called Util.doRFC2254Encoding() (correct RFC 4515 escaping) on the login name before handing it to LDAPCache, which masked the missing escaping in LDAPCache for those two call paths. Using LDAPCache directly (bypassing the login modules) does not reproduce through the normal LDAPLoginModule/LDAPPubkeyLoginModule authentication flow for this reason. It does reproduce through two other call paths that reach LDAPCache/LDAPBackingEngine without any prior escaping: * GSSAPILdapLoginModule passes the NameCallback name straight through, unescaped. * LDAPBackingEngine (listRoles) passes principal.getName() straight through, unescaped.
Affected software
Apache Software Foundation
Apache Karaf
pkg:maven/org.apache.karaf/apache-karafRun on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
Weaknesses
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
Apache Karaf's LDAPCache and LDAPBackingEngine build LDAP search filters by substituting placeholders (%u, %dn, %fqdn) with user input. Prior to version 4.4.12, the only sanitization applied was double backslash escaping, which does not cover all special characters that must be escaped in LDAP filters per RFC 4515 (notably '*', '(', ')', and NUL). This allows crafted input containing these characters to manipulate the LDAP filter structure, potentially causing broader matches than intended, over-granting roles, or incorrect user account resolution. While LDAPLoginModule and LDAPPubkeyLoginModule apply correct escaping and thus mitigate this issue, GSSAPILdapLoginModule and LDAPBackingEngine's listRoles method do not, making those paths vulnerable.
Potential Impact
An attacker able to supply specially crafted input to vulnerable call paths can manipulate LDAP queries, potentially causing authentication or authorization bypasses. This may result in over-granting of roles or incorrect user account resolution, depending on deployment-specific filter templates. The impact is limited to the affected modules that do not perform proper escaping and does not affect all authentication flows.
Mitigation Recommendations
A fix is available in Apache Karaf version 4.4.12 and later, which properly escapes all special LDAP characters according to RFC 4515. Users should upgrade to version 4.4.12 or later to remediate this vulnerability. Until upgraded, avoid using vulnerable call paths such as GSSAPILdapLoginModule and LDAPBackingEngine's listRoles method with untrusted input. Patch status is confirmed by the vendor advisory indicating the fix in 4.4.12.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- apache
- Date Reserved
- 2026-09-14T13:42:44.229Z
- State
- PUBLISHED
Threat ID: 6aba37faf7a7c541067d3266
Added to database: 09/28/2026, 09:48:42 UTC
Last enriched: 09/28/2026, 10:02:46 UTC
Last updated: 09/29/2026, 01:57:23 UTC
Views: 18
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.