Strona główna / Blog / Parse Server: puste hasło, token

Blog · case study

Parse Server CVE-2026-87806: puste hasło w LDAP może dać ważny session token

W CVE-2026-87806 nie ma skomplikowanego chaina RCE — jest coś ciekawszego: aplikacja wykonała poprawną operację protokołu LDAP, ale błędnie zinterpretowała jej semantykę jako dowód uwierzytelnienia. Parse Server w podatnych wersjach przekazywał hasło klienta do LDAP authentication adaptera, nie sprawdzając, czy jest ono niepustym stringiem. Zero-length credential w LDAP simple bind może oznaczać unauthenticated bind; część katalogów odpowiada sukcesem (mapując połączenie do anonymous), a Parse Server traktował brak błędu jako potwierdzenie tożsamości. Efekt: atakujący znający directory username mógł uzyskać ważny session token.

CVE-2026-87806: puste hasło → LDAP unauthenticated simple bind → brak błędu interpretowany jako proof of authentication → valid session token (account takeover).
Affected/fix: ≤ 8.6.87 oraz 9.0.0–<9.10.1-alpha.7; fix 8.6.88 i 9.10.1-alpha.7.

Affected nie znaczy exploitable

Nie każde wdrożenie z podatną wersją jest exploitable. Muszą być spełnione warunki: włączony built-in LDAP authentication adapter, katalog przyjmuje unauthenticated simple bind, atakujący zna directory username ofiary. Advisory podaje Active Directory jako przykład środowiska, gdzie taki bind bywa akceptowany domyślnie; stock OpenLDAP, który go odrzuca, nie jest tą ścieżką exploitable. Idealny przypadek conditional VEX: zamiast component affected → vulnerable przechowuj component affected + LDAP adapter enabled + directory accepts unauthenticated simple bind = environment exploitable.

Attack path i błędne założenie

attacker zna username -> wysyla login z pustym haslem -> Parse Server przekazuje empty credential do LDAP -> directory zwraca success dla unauthenticated bind -> adapter interpretuje success jako proof of authentication -> Parse Server wydaje valid session token

Kluczowym błędem nie jest „LDAP pozwala na anonymous” (to może być zgodne z protokołem i konfiguracją), lecz aplikacyjne założenie LDAP bind returned no error == user authenticated. Te dwa zdania nie są równoważne.

Jakość danych VM i config drift

SCA wykryje wersję i CVE, ale nie wie, czy LDAP adapter jest aktywny, jaki directory backend jest skonfigurowany i jak zachowuje się dla pustego credentiala. Nie zamykaj findingu jako false positive tylko dlatego, że obecny katalog odrzuca anonymous bind — zmiana IdP/LDAP albo polityki katalogu może ponownie otworzyć path bez zmiany wersji aplikacji. Właściwy status: product vulnerable / environment currently non-exploitable z rewalidacją po zmianie identity backendu.

Fix, controls, weryfikacja

Maintainer nie próbuje „lepiej interpretować” odpowiedzi LDAP — patch przesuwa granicę walidacji wcześniej: adapter wymaga niepustego hasła i odrzuca request zanim skontaktuje się z katalogiem (usuwa ambiguity na wejściu). Compensating controls do czasu upgrade: skonfigurować directory tak, by odrzucał unauthenticated simple bind (backend-dependent — dowód techniczny, test bindu, nie deklaracja) albo wyłączyć built-in LDAP adapter (usuwa vulnerable path). Po aktualizacji weryfikuj: wersję 8.6.88 lub fixed 9.x, aktywny adapter, request z pustym password → brak LDAP bind outbound i brak session tokenu, oraz że poprawne logowania nadal działają. Ta druga połowa jest ważna — remediation verification sprawdza i blokadę ataku, i poprawny auth flow.

Powiązane na blogu

Źródła

Nota redakcyjna: stan informacji 11 września 2026. CVE-2026-87806 (Parse Server): puste hasło w LDAP simple bind interpretowane jako proof of authentication. Affectedness zależy od aktywnego adaptera i semantyki katalogu (AD vs stock OpenLDAP). Brak potwierdzenia active exploitation.

Zapamiętaj jedno

Nie traktuj sukcesu protokołu jako automatycznego sukcesu właściwości bezpieczeństwa. LDAP może odpowiedzieć zgodnie ze specyfikacją, a aplikacja i tak zbuduje na tym błędną granicę zaufania — jednostką exploitable risk jest auth adapter + directory semantics + token issuance path, nie sama wersja.