CVE-2026-69659
ŚrednieCVSS 5.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 4 - wyżej niż 4% wszystkich znanych CVE
Streszczenie
Podatność niekontrolowanego zużycia zasobów w ash-project ash pozwala atakującemu wyczerpać pamięć węzła poprzez spreparowany kursor paginacji keyset. Czytanie akcji z paginacją keyset deserializuje dostarczony przez klienta kursor page[:after] lub page[:before] w decode_values/2 w lib/ash/page/keyset.ex, który dekoduje wartość base64 i przekazuje do :erlang.binary_to_term/2 bez ograniczania rozmiaru. Format terminu zewnętrznego Erlanga obsługuje skompresowane payloady zlib, które dekompresor rozszerza transparentnie, więc kursor o rozmiarze kilku kilobajtów może zaalokować dziesiątki megabajtów pamięci w jednym wywołaniu. Ash sam koduje kursory nieskompresowane, więc dekoder akceptuje kształt terminu, którego enkoder nigdy nie produkuje. Równoczesne żądania agregują te alokacje i mogą zakończyć węzeł.
Ocena ryzyka
Atakujący może zdalnie spowodować wyczerpanie pamięci, prowadząc do awarii usługi (DoS) i potencjalnie do przerwania działania całego systemu opartego na Ash.
Rekomendacja
Zaktualizuj bibliotekę ash do wersji 3.31.1 lub nowszej, która zawiera poprawkę. Ogranicz dostęp do akcji z paginacją keyset, jeśli to możliwe.
Oryginalny opis (angielski, źródło NVD)
Uncontrolled Resource Consumption vulnerability in ash-project ash allows an attacker to exhaust the memory of the node via a crafted keyset pagination cursor. Read actions with keyset pagination deserialize the client-supplied page[:after] or page[:before] cursor in decode_values/2 in lib/ash/page/keyset.ex, which base64-decodes the value and passes it to :erlang.binary_to_term/2 without bounding its size. The Erlang external term format supports zlib-compressed payloads, which the decoder inflates transparently, so a cursor of a few kilobytes can allocate tens of megabytes of heap in a single call. Ash itself only ever encodes cursors uncompressed, so the decoder accepts a term shape its encoder never produces. Concurrent requests aggregate these allocations and can terminate the node. This issue affects ash: from 1.17.0 before 3.31.1.

