CVE-2026-81318
NiskieCVSS 2.1Streszczenie
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.
Ocena ryzyka
Narusza to izolację tenantów, umożliwiając wyciek danych między tenantami, co może prowadzić do nieautoryzowanego ujawnienia informacji.
Rekomendacja
Zaleca się aktualizację ash_sql do wersji 0.7.1 lub nowszej oraz przetestowanie zapytań agregujących w środowisku wielotenantowym.
Inne podatności w ash_sql
Zobacz wszystkie- 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.
- CVE-2026-77454Średnie
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.
Oryginalny opis (angielski, źródło NVD)
Incorrect Authorization vulnerability in ash-project ash_sql allows a caller in a schema-based multitenant application to receive aggregate values computed from another tenant's rows. When an aggregate is computed over a distinct query, AshSql.AggregateQuery.add_single_aggs/5 rebuilds the outer query from query.from.source alone, which is only the {table, schema} tuple and does not carry query.prefix or query.from.prefix. For strategy(:context) multitenancy those hold the tenant schema, so the rebuilt outer query reads the repo's default schema while the inner correlated subquery still reads the tenant schema, and the two are joined only on primary key. The aggregate, and any relationship join added off the prefix-less binding, is then computed against the wrong tenant's rows. The neighbouring limit and exists branches instead wrap the query with subquery/1, which preserves the prefix. This issue affects ash_sql: from 0.1.0 before 0.7.1.

