CVE-2026-90961
moderateAuthentication Bypass via Empty Password in MISP LDAP and LinOTP Auth Plugins
MISP's optional LdapAuth and LinOTPAuth plugins replace CakePHP's FormAuthenticate class without replicating its _checkFields() input validation, so empty or non-string login credentials reach the authentication backend unvalidated. In the LDAP path, an empty password is forwarded to ldap_bind(), which many directory servers accept as a valid unauthenticated bind per RFC 4513, allowing an attacker who knows any legitimate user's email address to log in as that user without a password; the LinOTP path likewise accepts an empty password against a stored hash of the empty string in mixed-authentication mode. A secondary flaw stores an empty-password hash for auto-provisioned LDAP accounts, which also verifies during mixed-auth fallback if the user disappears from LDAP. Exploitation requires only that the plugin be enabled, network access to the login page, and knowledge of one valid email — no prior authentication — and grants the full privileges of the impersonated user, potentially including administrative access to threat intelligence data. No public proof-of-concept exists and no exploitation in the wild has been reported.
What to do: Upgrade MISP to a release newer than 2.5.45 as soon as a patched version is available, or disable the LdapAuth/LinOTPAuth plugins if they are not required. Configure the LDAP directory server to reject unauthenticated (empty-password) binds per RFC 4513, and audit auto-provisioned user accounts for empty password hashes, resetting any found. Review authentication logs for successful logins involving empty, null, or malformed password fields to rule out prior compromise.
| MISP Project MISP (LdapAuth authentication plugin) | ≤2.5.45 |
| MISP Project MISP (LinOTPAuth authentication plugin) | ≤2.5.45 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
The LdapAuth and LinOTPAuth authentication plugins in MISP contain an authentication bypass vulnerability. Both LdapAuthenticate and LinOTPAuthenticate replace CakePHP's FormAuthenticate class but fail to replicate its _checkFields() input validation guard. As a result, the email and password fields extracted from the login request are passed to downstream authentication logic without verifying that they are non-empty strings. In the LDAP authenticator, an empty or null password is forwarded to ldap_bind(). Per RFC 4513 section 5.1.2, a bind request with a valid DN and an empty password constitutes an unauthenticated bind, which many LDAP directory servers accept as successful. An attacker who knows any valid user email address in the directory can therefore authenticate as that user without possessing a password. Additionally, non-string values (null, false, arrays) are either coerced to empty strings by ldap_bind(), raise TypeErrors, or are misinterpreted as find conditions in _findUser(), all of which can lead to unintended authentication outcomes. In the LinOTP authenticator, the same missing guard allows non-string credentials to be concatenated into the LinOTP verification request, and in the mixed-authentication branch an empty password is accepted against a stored hash of the empty string. A secondary issue in the LDAP authenticator is that newly created user accounts (auto-provisioned on first LDAP login) were assigned an empty password. Because the save path skips validation, the empty string is hashed and stored. If the user later ceases to be found in LDAP and the mixed-authentication fallback is used, the stored hash of the empty string verifies against an empty password, again permitting unauthenticated access. The vulnerability requires that the affected plugin (LdapAuth or LinOTPAuth) is enabled on the MISP instance and that the attacker knows at least one valid email address registered in the directory or MISP user store. No prior authentication is required. Successful exploitation grants the attacker the full privileges of the impersonated user, which may include administrative access to threat intelligence data. Version affected: ≤2.5.45
- Weakness
- CWE-20, CWE-287
- Vector
- CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
In the news0 stories
No ingested article mentions this CVE yet.