CVE-2026-93471
WysokieCVSS 8.7Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 37 - wyżej niż 37% wszystkich znanych CVE
Streszczenie
Nieprawidłowa obsługa wysoce skompresowanych danych (amplifikacja danych) w esaml_binding w dropbox esaml pozwala nieuwierzytelnionemu atakującemu na wyczerpanie pamięci serwera i awarię maszyny wirtualnej Erlang poprzez spreparowany skompresowany SAMLResponse. Funkcja esaml_binding:decode_response/2 dekoduje base64 dostarczony przez atakującego SAMLResponse, rozpakowuje go za pomocą zlib:unzip/1 bez ograniczenia rozmiaru wyjściowego, a następnie konwertuje wynik do listy znaków przez binary_to_list/1 przed parsowaniem. Dzieje się to na endpointach SAML consume (ACS) i single-logout, które z założenia akceptują nieuwierzytelnione żądania, i odbywa się przed jakąkolwiek weryfikacją podpisu. Mały strumień deflate osiąga współczynnik kompresji bliski 1000 do 1, więc ciało żądania o rozmiarze dziesiątek kilobajtów rozpakowuje się do setek megabajtów, a następnie do kilku gigabajtów sterty listy, więc kilka żądań wyczerpuje pamięć i powoduje awarię węzła. Problem dotyczy esaml od wersji 0.1.0 wzwyż.
Ocena ryzyka
Nieuwierzytelniony atakujący może zdalnie spowodować odmowę usługi poprzez wyczerpanie pamięci, co prowadzi do niedostępności usługi uwierzytelniania SAML. Może to zablokować dostęp do aplikacji zależnych od tego dostawcy tożsamości.
Rekomendacja
Zaktualizuj bibliotekę esaml do wersji zawierającej poprawkę ograniczającą rozmiar rozpakowywanych danych. Do czasu aktualizacji rozważ wdrożenie limitów rozmiaru żądań na poziomie reverse proxy lub load balancera.
Inne podatności w esaml
Zobacz wszystkie- CVE-2026-86696Wysokie
Podatność polegająca na przydzielaniu zasobów bez ograniczeń lub dławienia w esaml w dropbox esaml pozwala nieuwierzytelnionemu atakującemu na wyczerpanie tablicy atomów maszyny wirtualnej Erlang i awarię węzła poprzez niepodpisane komunikaty LogoutResponse. Funkcja esaml:status_code_map/1 w src/esaml.erl mapuje każdą nierozpoznaną wartość StatusCode na atom za pomocą list_to_atom/1 na ostatnim segmencie URN oddzielonym dwukropkiem. esaml_sp:validate_logout_response/2 weryfikuje podpis tylko wtedy, gdy wiadomość go zawiera, więc niepodpisany LogoutResponse wysłany na endpoint single-logout dociera do esaml:decode_logout_response/1 i tworzy jeden trwały atom na każdą odrębną wartość statusu. Atomy nigdy nie są odzyskiwane, a maszyna wirtualna ogranicza tablicę atomów do około miliona wpisów, więc atakujący, który wyśle tak wiele odrębnych wartości, powoduje awarię węzła. Problem dotyczy esaml od wersji 0.1.0 wzwyż.
- CVE-2026-105270Wysokie
W bibliotece esaml (dropbox) funkcja esaml_binding:decode_response/2 parsuje zdekodowaną odpowiedź SAMLResponse za pomocą xmerl_scan:string/2, która rejestruje każdą nazwę elementu, atrybutu i prefiks przestrzeni nazw jako trwały atom. Punkty końcowe ACS i single-logout wywołują ją na nieuwierzytelnionych żądaniach przed sprawdzeniem podpisu, więc jeden dokument z tysiącami unikalnych nazw tworzy tysiące atomów w granicach limitu 128 KB. Atomy nie są odzyskiwane, a tabela atomów VM ma limit około miliona wpisów, więc kilkadziesiąt żądań może zablokować węzeł.
- CVE-2026-28809Średnie
Biblioteka esaml (i jej forki) zawiera podatność XXE. Przed weryfikacją podpisu, esaml parsuje kontrolowane przez atakującego wiadomości SAML za pomocą xmerl_scan:string/2 bez wyłączania rozwijania encji XML. W Erlang/OTP przed wersją 27, Xmerl domyślnie zezwala na encje, co umożliwia ataki XXE przed weryfikacją podpisu. Atakujący może odczytać lokalne pliki (np. sekrety z Kubernetes) i włączyć ich zawartość do dokumentu SAML.
Oryginalny opis (angielski, źródło NVD)
Improper Handling of Highly Compressed Data (Data Amplification) in esaml_binding in dropbox esaml allows an unauthenticated attacker to exhaust server memory and crash the Erlang VM via a crafted compressed SAMLResponse. esaml_binding:decode_response/2 base64-decodes the attacker-supplied SAMLResponse, inflates it with zlib:unzip/1 with no bound on the output, then converts the result to a charlist with binary_to_list/1 before parsing. This runs on the SAML consume (ACS) and single-logout endpoints, which accept unauthenticated requests by design, and it runs before any signature check. A small deflate stream reaches a compression ratio near 1000 to 1, so a request body of tens of kilobytes inflates to hundreds of megabytes and then to several gigabytes of list heap, so a few requests exhaust memory and take the node down. This issue affects esaml: from 0.1.0 onward.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

