Четыре уязвимости в GraphQL-стеке juniper: падение и перегрузка сервера одним запросом

29.10.2026

В библиотеках juniper, juniper_hyper и juniper_warp закрыты четыре уязвимости отказа в обслуживании с оценкой 7.5 (HIGH). Каждой хватает одного неаутентифицированного запроса.

Падение из-за вложенности

Парсер juniper вызывал себя на каждом уровне вложенности документа GraphQL, а глубину не ограничивал. Глубоко вложенные наборы полей, входные значения и типы-списки переполняли стек потока, а переполнение стека убивает процесс целиком — вместе со всеми запросами в работе. Валидация и исполнение так же рекурсивно шли по распространениям фрагментов, поэтому длинная цепочка фрагментов роняла сервер и на этих этапах.

Перегрузка вычислениями

Несколько мест в juniper работали быстрее, чем рос документ. Правило OverlappingFieldsCanBeMerged сравнивало все пары полей с одинаковым именем ответа, правила валидации заново обходили фрагмент на каждом пути, а исполнение разворачивало поля фрагмента на каждое его использование — документ в 1,2 КБ мог превратиться в миллиард полей. Парсер вдобавок удалял токены из начала вектора, и время разбора росло квадратично.

Тело запроса без ограничения

juniper_hyper и juniper_warp читали тело POST-запроса целиком в память, не проверяя размер. Большой запрос исчерпывал память сервера.

Исправления

juniper 0.17.2 отклоняет документы глубже 64 уровней и длиннее 15 000 токенов, а после разворота фрагментов — операции больше 15 000 полей; лимиты меняются через RootNode::limit_depth(), limit_tokens() и limit_fields(). juniper_hyper 0.10.1 и juniper_warp 0.9.1 читают не больше 2 МиБ тела и отвечают 413 на большее; лимит меняется через juniper_hyper::BodyLimit в расширениях запроса или make_graphql_filter_with_body_limit().

Оригинал

RUSTSEC-2026-0415: juniper_hyper: Unbounded memory use on large request bodies. RUSTSEC-2026-0416: juniper: Stack overflow on deeply nested GraphQL documents. RUSTSEC-2026-0417: juniper: Excessive CPU and memory use on crafted GraphQL documents. RUSTSEC-2026-0419: juniper_warp: Unbounded memory use on large request bodies.

Упоминаний: 4 · Просмотров: 4