CVE-2026-86696
WysokieCVSS 8.2Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 37 - wyżej niż 37% wszystkich znanych CVE
Streszczenie
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ż.
Ocena ryzyka
Nieuwierzytelniony atakujący może zdalnie spowodować awarię węzła Erlang, prowadząc do odmowy usługi dla usług uwierzytelniania SAML. Może to zakłócić logowanie i wylogowywanie użytkowników w aplikacjach korzystających z tego dostawcy tożsamości.
Rekomendacja
Zaktualizuj bibliotekę esaml do wersji zawierającej poprawkę, która nie tworzy atomów z niezaufanych danych wejściowych. Do czasu aktualizacji rozważ ograniczenie dostępu do endpointu single-logout lub wdrożenie dodatkowej walidacji.
Inne podatności w esaml
Zobacz wszystkie- CVE-2026-93471Wysokie
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ż.
- 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)
Allocation of Resources Without Limits or Throttling vulnerability in esaml in dropbox esaml allows an unauthenticated attacker to exhaust the Erlang VM atom table and crash the node via unsigned LogoutResponse messages. esaml:status_code_map/1 in src/esaml.erl maps any StatusCode value it does not recognize to an atom with list_to_atom/1 on the last colon-separated segment of the URN. esaml_sp:validate_logout_response/2 verifies a signature only when the message carries one, so an unsigned LogoutResponse posted to the single-logout endpoint reaches esaml:decode_logout_response/1 and mints one permanent atom per distinct status value. Atoms are never reclaimed and the VM caps the atom table at about one million entries, so an attacker who posts that many distinct values aborts the node. This issue affects esaml: from 0.1.0 onward.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

