Graphiti — это платформа, которая устанавливается поверх моделей и предоставляет их через интерфейс, совместимый с JSON:API. Версии до 1.10.2 имеют уязвимость выполнения произвольного метода, которая влияет на функциональность записи JSONAPI Graphiti. Злоумышленник может создать вредоносную полезную нагрузку JSONAPI с произвольными именами отношений для вызова любого общедоступного метода в базовом экземпляре модели, классе или его ассоциациях.
Это затрагивает любое приложение, предоставляющее конечные точки записи Graphiti (создание/обновление/удаление) ненадежным пользователям. Метод `Graphiti::Util::ValidationResponse#all_valid?` рекурсивно вызывает `model.send(name)`, используя имена отношений, взятые непосредственно из предоставленных пользователем полезных данных JSONAPI, без проверки их на соответствие настроенным дополнительным нагрузкам ресурса. Это позволяет злоумышленнику потенциально запустить любой общедоступный метод для данного экземпляра модели, класса экземпляра или связанных экземпляров или классов, включая деструктивные операции.
Это исправлено в Graphiti v1.10.2. Пользователям следует обновиться как можно скорее. Доступны некоторые обходные пути.
Убедитесь, что конечные точки записи Graphiti (создание/обновление) недоступны для ненадежных пользователей и/или примените строгие проверки аутентификации и авторизации перед обработкой любой операции записи, например, используйте строгие параметры Rails, чтобы гарантировать обработку только допустимых параметров.
Показать оригинальное описание (EN)
Graphiti is a framework that sits on top of models and exposes them via a JSON:API-compliant interface. Versions prior to 1.10.2 have an arbitrary method execution vulnerability that affects Graphiti's JSONAPI write functionality. An attacker can craft a malicious JSONAPI payload with arbitrary relationship names to invoke any public method on the underlying model instance, class or its associations. Any application exposing Graphiti write endpoints (create/update/delete) to untrusted users is affected. The `Graphiti::Util::ValidationResponse#all_valid?` method recursively calls `model.send(name)` using relationship names taken directly from user-supplied JSONAPI payloads, without validating them against the resource's configured sideloads. This allows an attacker to potentially run any public method on a given model instance, on the instance class or associated instances or classes, including destructive operations. This is patched in Graphiti v1.10.2. Users should upgrade as soon as possible. Some workarounds are available. Ensure Graphiti write endpoints (create/update) are not accessible to untrusted users and/or apply strong authentication and authorization checks before any write operation is processed, for example use Rails strong parameters to ensure only valid parameters are processed.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Graphiti Graphiti
cpe:2.3:a:graphiti:graphiti:*:*:*:*:*:ruby:*:*
|
— |
1.10.2
|