Уязвимость десериализации ненадежных данных в ash-project позволяет злоумышленнику, не прошедшему аутентификацию, внедрить выражение фильтра через поддельный курсор разбиения на страницы набора ключей, что приводит к внедрению SQL или выполнению кода в зависимости от уровня данных. Действия чтения с нумерацией набора ключей декодируют предоставленный клиентом курсор page[:after] или page[:before] в decode_values/2 в lib/ash/page/keyset.ex, используя non_executable_binary_to_term/2 с [:safe]. Эта защита блокирует новые атомы, функции и порты, но не структуру, построенную из атомов, уже интернированных в работающее приложение Ash, поэтому декодированное выражение %Ash.Query.Call{} сохраняется и встраивается в фильтр набора ключей в качестве значения сравнения в do_filters/4 и оценивается.
Поскольку курсор обходит макрос Ash.Expr, среда выполнения никогда не применяет параметр Private?/public? ворота, которые в противном случае отвергли бы его. В AshPostgres внедренный фрагмент встраивается в SQL-запрос; на уровнях данных ETS и Simple он оценивается в процессе как произвольный вызов функции. Эта проблема затрагивает ash: с 1.17.0 до 3.31.3.
Показать оригинальное описание (EN)
Deserialization of Untrusted Data vulnerability in ash-project ash allows an unauthenticated attacker to inject a filter expression through a forged keyset pagination cursor, resulting in SQL injection or code execution depending on the data layer. Read actions with keyset pagination decode the client-supplied page[:after] or page[:before] cursor in decode_values/2 in lib/ash/page/keyset.ex using non_executable_binary_to_term/2 with [:safe]. That guard blocks new atoms, funs, and ports, but not a struct built from atoms already interned in a running Ash application, so a decoded %Ash.Query.Call{} expression survives and is spliced into the keyset filter as a comparison value in do_filters/4 and evaluated. Because the cursor bypasses the Ash.Expr macro, the runtime never applies the private?/public? gate that would otherwise reject it. On AshPostgres the injected fragment is inlined into the SQL query; on the ETS and Simple data layers it is evaluated in-process as an arbitrary function call. This issue affects ash: from 1.17.0 before 3.31.3.
Характеристики атаки
Последствия
Строка CVSS v4.0
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Ash-Project Ash
cpe:2.3:a:ash-project:ash:*:*:*:*:*:*:*:*
|
1.17.0
|
3.31.3
|