CVE-2026-55736
ŚrednieCVSS 5.9Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 5 - wyżej niż 5% wszystkich znanych CVE
Streszczenie
Podatność w bibliotece Ash umożliwia atakującemu ustawienie wartości prywatnego argumentu akcji, który powinien być kontrolowany tylko przez zaufany kod serwera. Filtrowanie prywatnych argumentów jest niekompletne zarówno w ścieżce regularnej (dla kluczy binarnych), jak i w ścieżce atomowej (w ogóle nie filtruje).
Ocena ryzyka
Atakujący może wstrzyknąć wartość prywatnego argumentu, np. identyfikatora użytkownika odpowiedzialnego za autoryzację, co prowadzi do naruszenia integralności danych lub eskalacji uprawnień w aplikacji.
Rekomendacja
Należy natychmiast zaktualizować bibliotekę ash do wersji 3.29.3 lub nowszej, która zawiera poprawkę usuwającą lukę w filtrowaniu prywatnych argumentów.
Inne podatności w ash
Zobacz wszystkie- CVE-2026-67579Wysokie
Podatność na deserializację niezaufanych danych w ash-project ash pozwala nieuwierzytelnionemu atakującemu wstrzyknąć wyrażenie filtru przez sfałszowany kursor paginacji keyset, co może prowadzić do wstrzyknięcia SQL lub wykonania kodu w zależności od warstwy danych. Akcje odczytu z paginacją keyset dekodują kursor dostarczony przez klienta w decode_values/2 w lib/ash/page/keyset.ex przy użyciu non_executable_binary_to_term/2 z [:safe], co blokuje nowe atomy, funy i porty, ale nie struktury zbudowane z atomów już zainternowanych w działającej aplikacji Ash, więc zdekodowane wyrażenie %Ash.Query.Call{} przetrwa i jest wstawiane do filtra keyset jako wartość porównania w do_filters/4 i oceniane. Ponieważ kursor omija makro Ash.Expr, środowisko wykonawcze nigdy nie stosuje bramki private?/public?, która mogłaby je odrzucić. Na AshPostgres wstrzyknięty fragment jest wstawiany do zapytania SQL; na warstwach danych ETS i Simple jest oceniany w procesie jako dowolne wywołanie funkcji. Problem dotyczy ash od 1.17.0 przed 3.31.3.
- CVE-2026-70395Niskie
Podatność nieprawidłowej neutralizacji specjalnych elementów w logice zapytań danych w ash-project ash pozwala atakującemu sfałszować relację do rekordu, którego nie zna, oraz odzyskać sekretną wartość używaną do jego wyszukania. Gdy manage_relationship jest używane z on_lookup: :relate na relacji belongs_to, wartość lookup dostarczona przez klienta jest przekazywana do Ash.Query.filter/2 bez rzutowania na typ atrybutu. Zagnieżdżona mapa przesłana tam, gdzie oczekiwany jest skalar, jest interpretowana jako predykat filtra, a nie literał, więc wyszukiwanie konkretnego rekordu staje się zapytaniem o dowolny rekord spełniający warunek. Ta sama ścieżka pomija Ash.Query.limit(1), pozostawiając Ash.read_one/2 zdolnym do rozróżnienia braku dopasowania od jednego dopasowania od kilku, co zamienia predykaty porównawcze w wyrocznię dla wartości lookup. Autoryzacja nie jest naruszona; polityka odczytu docelowego nadal obowiązuje.
- CVE-2026-69659Średnie
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ł.
- CVE-2025-48044Wysokie
W projekcie ash występuje podatność nieprawidłowej autoryzacji, która umożliwia ominięcie uwierzytelniania. Problem dotyczy plików lib/ash/policy/policy.ex i funkcji 'Elixir.Ash.Policy.Policy':expression/2 w wersjach od 3.6.3 do 3.7.0.
- CVE-2025-48043Wysokie
Biblioteka Ash w wersjach od 0.1.0 do 3.6.2 ma podatność w mechanizmie autoryzacji, która pozwala na ominięcie uwierzytelniania. Problem dotyczy pliku lib/ash/policy/authorizer/authorizer.ex i funkcji strict_filters/2.
- CVE-2025-48042Wysokie
W bibliotece ash w wersjach od 0.1.0 do 3.5.39 stwierdzono podatność na nieprawidłową autoryzację w operacjach zbiorczych (bulk create, destroy, update). Podatność ta umożliwia wykorzystanie nieprawidłowo skonfigurowanych poziomów bezpieczeństwa kontroli dostępu.
Oryginalny opis (angielski, źródło NVD)
Improperly Controlled Modification of Dynamically-Determined Object Attributes vulnerability in ash-project ash allows a user to set the value of a private action argument that is intended to be controlled only by trusted server-side code. Action arguments declared with public?: false are meant to be set internally (for example via Ash.Changeset.set_private_argument/3) and must not be settable from end-user input. When a changeset is built from a parameter map, Ash filters out private arguments, but the filtering is incomplete. In the regular changeset path (for_create, for_update, for_destroy), private arguments are stripped only when the parameter key is an atom. When the key is a binary (string), as is the case for user-supplied parameters, the private argument is kept and the user controls its value. In the atomic path (Ash.Changeset.fully_atomic_changeset/4, also reached through atomic and bulk updates), private arguments are not stripped at all, regardless of whether the key is an atom or a binary. An attacker who can submit parameters to an action that defines a private argument can therefore inject a value for that argument. Depending on how the application uses the argument (for example an acting_user_id driving authorization or record ownership), this can lead to an integrity violation or privilege escalation. This issue affects ash: from 3.0.0 before 3.29.3.

