Strawberry GraphQL — это библиотека для создания API-интерфейсов GraphQL. До версии 0.312.3 обработчики подписок WebSocket Strawberry GraphQL как для протоколов Graphql-transport-ws, так и для устаревших протоколов GraphQl-ws выделяли asyncio.Task и связанный объект Operation для каждого входящего сообщения о подписке, не налагая каких-либо ограничений на количество активных подписок на одно соединение. Злоумышленник, не прошедший проверку подлинности, может открыть одно соединение WebSocket, отправить Connection_init, а затем рассылать сообщения подписки с уникальными идентификаторами.
Каждое сообщение безоговорочно порождает новый asyncio.Task и асинхронный генератор, вызывая линейный рост памяти и насыщение цикла событий. Это приводит к деградации сервера или сбою OOM. Эта уязвимость исправлена в версии 0.312.3.
Показать оригинальное описание (EN)
Strawberry GraphQL is a library for creating GraphQL APIs. Prior to 0.312.3, Strawberry GraphQL's WebSocket subscription handlers for both the graphql-transport-ws and legacy graphql-ws protocols allocate an asyncio.Task and associated Operation object for every incoming subscribe message without enforcing any limit on the number of active subscriptions per connection. An unauthenticated attacker can open a single WebSocket connection, send connection_init, and then flood subscribe messages with unique IDs. Each message unconditionally spawns a new asyncio.Task and async generator, causing linear memory growth and event loop saturation. This leads to server degradation or an OOM crash. This vulnerability is fixed in 0.312.3.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Strawberry Strawberry_Graphql
cpe:2.3:a:strawberry:strawberry_graphql:*:*:*:*:*:python:*:*
|
— |
0.312.3
|