Implementacja uwierzytelniania Azure Active Directory (AAD) w systemie MISP zawierała wiele poważnych błędów w przepływie autoryzacji OAuth 2.0. Podatności umożliwiają m.in. przejęcie sesji, ataki session fixation, osłabienie ochrony CSRF oraz wstrzykiwanie treści do logów.
▸ Pokaż oryginał (EN)
The Azure Active Directory (AAD) authentication implementation contained multiple weaknesses in its OAuth 2.0 authorization flow that could allow attackers to bypass important security guarantees provided by the protocol. The application used the PHP session identifier (session_id()) as the OAuth state parameter. Because session identifiers are long-lived authentication credentials, exposing them in OAuth redirect URLs could leak valid session tokens through browser history, HTTP Referer headers, reverse proxies, access logs, or third-party infrastructure involved in the authentication flow. If obtained by an attacker, the leaked session identifier could potentially be used for session hijacking. Additionally, the implementation did not regenerate the session identifier after successful authentication, leaving authenticated sessions susceptible to session fixation attacks where an attacker forces a victim to use a known session identifier before login and later reuses that identifier after authentication. The OAuth state value was also not implemented as a dedicated, single-use nonce. This weakened CSRF protections and increased the risk of replay attacks against the OAuth callback process. The authentication flow further failed to enforce HTTPS for the configured OAuth redirect URI. If a non-HTTPS redirect URI was used, OAuth authorization codes and access tokens could traverse the network in plaintext, exposing sensitive credentials to network attackers. Finally, OAuth error responses containing attacker-controlled GET parameters were logged verbatim. An attacker could inject control characters or crafted log content, leading to log forging, log injection, or corruption of audit records. The fix introduces: * A dedicated cryptographically random OAuth state value. * Single-use state validation and invalidation. * Constant-time state comparison using hash_equals(). * Session identifier rotation after successful authentication. * Enforcement of HTTPS-only redirect URIs. * Sanitized and length-limited logging of OAuth error parameters. AAD Authentication Plugin (OAuth 2.0 / Azure Active Directory integration)
Aplikacja używała identyfikatora sesji PHP (session_id()) jako parametru stanu OAuth, co prowadziło do ekspozycji długoterminowych tokenów sesji w URL-ach, nagłówkach Referer, logach dostępu i infrastrukturze pośredniczącej. Po pomyślnym uwierzytelnieniu identyfikator sesji nie był regenerowany, co umożliwiało ataki session fixation — atakujący mógł z góry narzucić ofierze znany identyfikator sesji, a następnie go przejąć. Wartość stanu OAuth nie była jednorazowym nonce, co osłabiało ochronę przed CSRF i atakami replay na callback OAuth. Implementacja nie wymuszała ponadto HTTPS dla redirect URI, narażając kody autoryzacyjne i tokeny dostępu na przechwycenie w ruchu sieciowym w postaci jawnego tekstu. Dodatkowo błędy OAuth zawierające parametry GET kontrolowane przez atakującego były zapisywane bez sanityzacji, co umożliwiało log injection i fałszowanie rekordów audytu.
Atakujący może przejąć sesję uwierzytelnionego użytkownika (session hijacking lub session fixation), ominąć ochronę CSRF, przechwycić tokeny OAuth przesyłane niezaszyfrowanym kanałem oraz sfałszować lub uszkodzić logi audytu poprzez wstrzyknięcie kontrolowanych danych.
Należy zastosować patch dostępny w referencjach producenta (commit 146bc40ad6e10a44f01e8ed62d5f7bc9c06cc4fa w repozytorium GitHub MISP). Patch wprowadza kryptograficznie losowy jednorazowy nonce jako stan OAuth, rotację identyfikatora sesji po uwierzytelnieniu, porównanie stanu w czasie stałym (hash_equals()), wymuszenie HTTPS dla redirect URI oraz sanityzację logowanych parametrów błędów OAuth.
Misp-Project MISP z włączoną wtyczką uwierzytelniania AAD (OAuth 2.0 / Azure Active Directory); konkretne wersje wskazane w referencjach producenta
Podatność sklasyfikowana jako CWE-384 (Session Fixation). Opis obejmuje łącznie pięć odrębnych słabości w jednym komponencie (wtyczka AAD OAuth 2.0). Fix dostępny pod adresem: https://github.com/MISP/MISP/commit/146bc40ad6e10a44f01e8ed62d5f7bc9c06cc4fa
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/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:XMisp Project Misp
APPMisp-Project< 2.5.42
Powiązane podatności
MISP: błędna kontrola dostępu w masowym usuwaniu obiektów (CWE-862)
MISP: RCE przez złośliwy plik konfiguracyjny rdkafka (CWE-829)
SQL Injection w MISP — manipulacja parametrami sortowania zapytań
MISP: Nieprawidłowa weryfikacja przesyłanego logo organizacji
MISP: Nieprawidłowa walidacja uploadu pliku umożliwia RCE