CVE-2026-90979
Received Received - Intake

LDAP Injection in Apache Directory Server

Vulnerability report for CVE-2026-90979, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-09-28

Last updated on: 2026-09-28

Assigner: Apache Software Foundation

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.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-09-28
Last Modified
2026-09-28
Generated
2026-09-28
AI Q&A
2026-09-28
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 3 associated CPEs
Vendor Product Version / Range
apache ldapcache *
apache ldapbackingengine *
apache karaf to 4.4.12 (exc)

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-90 The product constructs all or part of an LDAP query using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended LDAP query when it is sent to a downstream component.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability involves LDAP filter injection in Apache Karaf's LDAPCache and LDAPBackingEngine components. These components build LDAP search filters by substituting placeholders like %u with user-provided values (login name, DN, or FQDN) without fully sanitizing them. While double backslashes were used to escape some characters, RFC 4515 requires escaping additional characters like *, (, ), and NUL. A crafted username containing these characters can alter the filter structure, leading to unintended matches during authentication or role lookups.

Detection Guidance

Check Apache Karaf versions before 4.4.12 for affected components LDAPCache and LDAPBackingEngine. Review LDAP filter templates for userFilter and roleFilter configurations. Inspect login names containing special characters like *, (, ), or NUL in authentication logs.

Impact Analysis

An attacker could exploit this to bypass authentication or gain unauthorized roles by manipulating LDAP filters. For example, a crafted username might turn an equality match into a wildcard match or alter filter clauses to return unintended entries. This could allow login as a different user or over-granting of roles, depending on the deployment's filter templates.

Compliance Impact

This vulnerability could lead to unauthorized access or privilege escalation by manipulating LDAP filters, potentially violating data protection requirements under GDPR (e.g., unauthorized access to personal data) and HIPAA (e.g., unauthorized access to protected health information).

Mitigation Strategies

Upgrade Apache Karaf to version 4.4.12 or later. Apply RFC 4515-compliant escaping to all LDAP filter inputs. Disable or restrict access to GSSAPILdapLoginModule and LDAPBackingEngine listRoles until patched.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-90979. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart