🔍 CVE-2026-90961

0.0
CVSS Score
UNKNOWN
2026-09-14
2026-09-16 13:42
✅ 완료

🇰🇷 한글 설명

MISP의 LdapAuth 및 LinOTPAuth 인증 플러그인에서 인증 우회 취약점이 발견되었습니다. 입력값 검증 누락으로 인해 이메일과 비밀번호가 비어 있는 상태로 인증 로직에 전달될 수 있으며, LDAP의 unauthenticated bind 특성을 악용하여 비밀번호 없이 특정 사용자로 로그인할 수 있습니다.

💡 쉬운 설명

로그인할 때 비밀번호를 입력하지 않아도 시스템이 이를 정상적인 로그인으로 착각하여 통과시켜주는 보안 결함입니다. 공격자가 사용자 이메일 주소만 알고 있다면 비밀번호 없이 해당 사용자의 권한을 탈취할 수 있습니다.

🇺🇸 원문 (English)

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

📍 영향받는 시스템

MISP version ≤2.5.45 (LdapAuth 또는 LinOTPAuth 플러그인 활성화 시)

⚔️ 공격 벡터

유효한 사용자 이메일 주소를 입력하고 비밀번호 필드를 비워두거나 조작된 값을 전송하여 인증을 우회함

🛡️ 대응 방법

MISP를 최신 보안 패치가 적용된 버전으로 업데이트하고, 사용하지 않는 인증 플러그인은 비활성화하십시오.

🔧 검증 코드

설치된 MISP의 버전을 확인하여 2.5.45 이하인지 확인하십시오.

Shell / Script
python3 -c 'import requests; print("Vulnerable") if requests.get("YOUR_MISP_URL").status_code == 200 else print("Not Found")' # 실제 검증은 버전 확인 필요

💻 영향받는 소프트웨어

IBM Security Verify Access