CVE-2026-77454
ŚrednieCVSS 5.9Streszczenie
Podatność w ash_sql pozwala wywołującemu na ominięcie filtra autoryzacji lub zakresowania wyrażonego jako exists/2 nad relacją z limitem lub filtrem odwołującym się do parent(...). W pewnych przypadkach limit i predykat są pomijane, co powoduje, że sprawdzenie dopasowuje dowolny rekord z dowolnym powiązanym wierszem.
Ocena ryzyka
Może to prowadzić do naruszenia polityk bezpieczeństwa, w tym do autoryzacji działań dla nieuprawnionych aktorów, co zagraża integralności danych i kontroli dostępu.
Rekomendacja
Zaleca się aktualizację ash_sql do wersji 0.7.1 lub nowszej oraz przegląd polityk korzystających z exists/2 w celu zapewnienia poprawności filtrów.
Inne podatności w ash_sql
Zobacz wszystkie- CVE-2026-81318Niskie
Podatność w ash_sql pozwala wywołującemu w aplikacji wielotenantowej opartej na schematach na otrzymanie wartości agregatów obliczonych z wierszy innego tenanta. Dzieje się tak, gdy agregat jest liczony nad zapytaniem distinct, a zapytanie zewnętrzne jest odbudowywane bez prefiksu schematu, co prowadzi do odczytu z domyślnego schematu zamiast schematu tenanta.
- CVE-2026-81316Niskie
Podatność w ash_sql pozwala wywołującemu na otrzymanie wartości agregatu obliczonego nad wierszami, które powinny być wykluczone przez bardziej restrykcyjny filtr, ujawniając liczby, sumy lub listy poza granicami autoryzacji lub tenancyjnymi. Dzieje się tak, ponieważ dwa zapytania agregujące są uznawane za identyczne, gdy różnią się tylko filtrem, a nie sortowaniem.
- CVE-2026-80227Niskie
Podatność w ash_sql pozwala użytkownikowi na dodanie do pola tekstowego znaków tabulacji, nowej linii, powrotu karetki lub wysunięcia strony, aby przejść test unikalności lub równości w bazie danych, który w pamięci by się nie powiódł (lub odwrotnie). Dzieje się tak, ponieważ funkcja string_trim/1 w SQL usuwa tylko spacje, a nie wszystkie białe znaki, co powoduje różnice w zachowaniu między SQL a pamięcią.
- CVE-2026-78691Niskie
Podatność w ash_sql pozwala użytkownikowi, który dostarcza termin wyszukiwania do funkcji contains/2, string_starts_with/2 lub string_ends_with/2, na wstrzyknięcie dzikich kart LIKE do zapytania SQL, zamieniając dosłowne wyszukiwanie podciągu na wzorzec kontrolowany przez atakującego. Dzieje się tak, ponieważ funkcje pomocnicze nie escapują backslashy, co pozwala na obejście escapowania i aktywację dzikich kart.
Oryginalny opis (angielski, źródło NVD)
Incorrect Authorization vulnerability in ash-project ash_sql allows a caller to bypass a scoping or authorization filter expressed as exists/2 over a relationship that declares both a limit (or from_many?) and a parent(...)-referencing filter or sort. AshSql.Join.related_query/3 skips the caller-supplied exists predicate for such relationships and delegates it to limit_from_many/5. When the relationship's own filter or sort references parent(...), limit_from_many/5 takes a branch that drops both the limit and the predicate, emitting a bare correlated EXISTS with no predicate. The check then matches any record that has any related row. Most severely, when the expression backs a policy (for example authorize_if expr(exists(memberships, user_id == ^actor(:id)))), the actor-scoping condition disappears and the policy passes for any actor with any related row. This issue affects ash_sql: from 0.4.1 before 0.7.1.

