CVE-2026-85216: MISP LDAP and LinOTP Authentication Bypass via Empty or Invalid Credentials
MISP contains an authentication bypass vulnerability in its LDAP and LinOTP authentication components due to insufficient validation of user-supplied credentials.
The custom LdapAuthenticate and LinOTPAuthenticate components replace CakePHP's FormAuthenticate implementation but did not replicate its credential validation checks. As a result, empty or non-string values could reach the underlying authentication mechanisms.
In the LDAP authentication path, an attacker able to identify a valid directory user's email address could submit an empty password. The empty credential could be passed to ldapbind(), where an LDAP server accepting unauthenticated binds may return a successful result for a valid distinguished name combined with an empty password. MISP could consequently treat the attacker as the corresponding authenticated directory user without verification of the user's password.
The issue also affected the LinOTP authentication component. Invalid credential types were not rejected before being processed, and when mixed authentication was enabled, an empty password could be checked against a locally stored MISP password hash. LDAP-provisioned MISP accounts could additionally be created with an empty local password because account creation skipped normal validation, resulting in a hash corresponding to an empty password. This could permit authentication through the local fallback mechanism when such an account was no longer resolved through LDAP.
Successful exploitation could allow a remote unauthenticated attacker to impersonate an existing MISP user. If the targeted account has administrative or other privileged permissions, the attacker could gain corresponding access to sensitive threat-intelligence data, modify or delete information, alter configuration, or perform other privileged operations.
The patch resolves the vulnerability by requiring authentication identifiers and passwords to be valid strings, rejecting empty passwords where they are not explicitly permitted, and assigning a randomly generated local password to LDAP-provisioned accounts instead of storing a hash derived from an empty password.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
Ensure MISP's custom LdapAuthenticate path validates that user-supplied authentication identifiers and passwords are valid strings, rejects empty passwords unless explicitly allowed, and for LDAP-provisioned accounts uses a randomly generated local password rather than a hash derived from an empty password.
MISP (LDAP authentication path) Credential validation for authentication identifiers and passwords = Require authentication identifiers and passwords to be valid strings; reject empty passwords where they are not explicitly permitted; for LDAP-provisioned accounts assign a randomly generated local password instead of storing a hash derived from an empty password - Configuration
Update/align the LinOTPAuthenticate component credential handling so invalid credential types and empty passwords are rejected prior to any authentication processing (mirroring required credential validation checks).
MISP (LinOTP authentication component) Credential validation = Validate credential types as strings and reject empty/invalid credential values before processing
Event History
Frequently Asked Questions
What conditions are required to exploit the LDAP authentication path?
An attacker needs to identify a valid directory user's email address and submit an empty password. Exploitation also depends on the LDAP server accepting an unauthenticated bind for the valid distinguished name with an empty password.
How does mixed authentication affect the LinOTP component?
When mixed authentication is enabled, an empty password could be checked against a locally stored MISP password hash. The LinOTP component also processed invalid credential types without rejecting them first.
What credential validation was missing?
The custom LDAP and LinOTP authentication components did not replicate CakePHP FormAuthenticate credential validation checks. Empty and non-string credential values could therefore reach the underlying authentication mechanisms.