CVE-2026-105270
WysokieCVSS 8.7Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 27 - wyżej niż 27% wszystkich znanych CVE
Streszczenie
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ł.
Ocena ryzyka
Nieuwierzytelniony atakujący może zdalnie doprowadzić do wyczerpania tabeli atomów Erlang VM i awarii węzła, powodując odmowę usługi dla usług uwierzytelniania SAML.
Rekomendacja
Zaktualizuj bibliotekę esaml do wersji zawierającej poprawkę lub ogranicz ekspozycję punktów końcowych SAML. Rozważ dodatkowe limity na poziomie reverse proxy i monitorowanie liczby atomów w VM.
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-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-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_binding in dropbox esaml allows an unauthenticated attacker to exhaust the Erlang VM atom table and crash the node via a crafted SAMLResponse. esaml_binding:decode_response/2 parses the decoded SAMLResponse with xmerl_scan:string/2, which interns every element name, attribute name, and namespace prefix it reads as a permanent atom. The SAML consume (ACS) and single-logout endpoints call it on unauthenticated requests before any signature check, so one well-formed document with thousands of distinct names mints thousands of atoms while staying inside the 128 KB request body limit. Atoms are never reclaimed and the VM caps the atom table at about one million entries, so a few dozen requests abort the node. This issue affects esaml: from 0.1.0 onward.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

