Mastodon Mastodon Mastodon Mastodon

Уязвимость XRING в библиотеке XQUIC позволяет удалённо крашить HTTP/3-серверы легитимным трафиком

Фото автора

CyberSecureFox Editorial Team

Опубликовано:

В библиотеке XQUIC — открытой реализации протоколов QUIC и HTTP/3 от Alibaba — обнаружена уязвимость, позволяющая удалённому неаутентифицированному клиенту аварийно завершить серверный процесс отправкой приблизительно 260 байт полностью легитимного QPACK-трафика. Уязвимость, получившая название XRING, затрагивает все выпуски XQUIC вплоть до актуальной версии 1.9.4. По состоянию на 10 июля патч отсутствует, CVE не присвоен. Операторам серверов на базе XQUIC рекомендуется немедленно отключить динамическую таблицу QPACK, установив параметр SETTINGS_QPACK_MAX_TABLE_CAPACITY в 0, либо полностью деактивировать поддержку HTTP/3.

Механизм уязвимости

Исследователь Себастьен Фери из FoxIO публично раскрыл уязвимость 8 июля. Корень проблемы — в логике расширения кольцевого буфера, который XQUIC использует для хранения динамической таблицы QPACK. Код расположен в файле xqc_ring_mem.c.

HTTP/3 применяет QPACK для сжатия повторяющихся заголовков. Клиент через выделенный управляющий канал (encoder stream) инструктирует сервер наращивать и изменять размер общей таблицы. Когда клиент запрашивает увеличение таблицы, XQUIC выделяет новый, больший буфер и копирует в него данные из старого. Процесс копирования обрабатывает четыре сценария в зависимости от того, «обёрнуты» ли данные в старом буфере, в новом, в обоих или ни в одном.

В одном из этих сценариев код по ошибке вычисляет размер «хвостовых» данных, используя ёмкость нового буфера вместо старого. Это приводит к грубому завышению длины копируемого блока. По данным исследователя, при расширении 64-байтовой таблицы до 65 байт с курсором записи вблизи конца буфера XQUIC вычисляет 70 байт хвостовых данных вместо реальных 6.

Завышенное значение далее используется в арифметике длины для вызова копирования памяти. Поскольку длина хранится в беззнаковом типе size_t, вычитание завышенного числа из меньшего значения приводит к целочисленному переполнению снизу — длина «оборачивается» до околомаксимального значения. Результат — попытка копирования далеко за пределами выделенной памяти.

В тестовой среде FoxIO (Ubuntu, сборка с _FORTIFY_SOURCE=2) защитный механизм glibc обнаруживал некорректную длину и принудительно завершал процесс. Без этой проверки копирование записывает данные за границы нового буфера. Исследователь продемонстрировал аварийное завершение, но не проверял, возможна ли эксплуатация для выполнения произвольного кода.

Что делает XRING особенно опасной

Ключевая особенность этой уязвимости — атака не требует ни аутентификации, ни отправки искажённых пакетов. Все значения, используемые в атаке, соответствуют спецификации QPACK. XQUIC по умолчанию объявляет лимит динамической таблицы в 16 КиБ; эксплойт запрашивает последовательно 64 и 65 байт — оба значения полностью легитимны. Клиенту достаточно привести таблицу в определённое состояние «обёрнутости», чтобы активировать дефектную ветку кода.

По данным FoxIO, ошибка присутствует в XQUIC с момента первого публичного выпуска в январе 2022 года. Публичный PoC-эксплойт доступен на GitHub. Эксплуатации в реальных атаках на момент раскрытия не зафиксировано.

Затронутые продукты и масштаб воздействия

XQUIC — библиотека с открытым исходным кодом, и риск не ограничивается инфраструктурой Alibaba. По данным исследователей, уязвимости подвержен любой сервер, использующий XQUIC для обслуживания HTTP/3 с настройками QPACK по умолчанию. Среди затронутых продуктов:

  • Alibaba XQUIC — все версии до v1.9.4 включительно
  • Tengine — веб-сервер Alibaba на базе Nginx, который, по утверждению FoxIO, обслуживает облачную инфраструктуру и CDN компании

Следует отметить, что утверждения о масштабе воздействия на инфраструктуру Alibaba основаны исключительно на данных исследователя — официального подтверждения от вендора получено не было.

Контекст: серия уязвимостей в HTTP/2 и HTTP/3

XRING вписывается в тревожную тенденцию обнаружения уязвимостей удалённого отказа в обслуживании в стеках HTTP/2 и HTTP/3. Тремя неделями ранее была раскрыта уязвимость типа use-after-free в модуле HTTP/3 NGINX (CVE-2026-42530), эксплуатируемая через тот же QPACK encoder stream — другой класс ошибки, но идентичная поверхность атаки. В феврале HAProxy исправила два аварийных завершения в QUIC, одно из которых также было вызвано целочисленным переполнением снизу — тем же типом ошибки, что и в XRING, но для его эксплуатации требовался искажённый пакет.

Принципиальное отличие XRING: для атаки достаточно полностью легитимного ввода. Одна арифметическая ошибка — и сервер прекращает работу.

Рекомендации по митигации

Поскольку официальный патч отсутствует, операторам серверов на базе XQUIC необходимо применить обходные меры:

  1. Отключить динамическую таблицу QPACK — установить параметр SETTINGS_QPACK_MAX_TABLE_CAPACITY в значение 0. Это устраняет вектор атаки, но увеличивает объём передаваемых заголовков.
  2. Отключить поддержку HTTP/3 полностью — радикальная мера, но гарантированно исключающая эксплуатацию данной уязвимости.
  3. Отслеживать обновления XQUIC — проверять репозиторий проекта на предмет выхода исправленной версии.
  4. Убедиться в наличии защиты _FORTIFY_SOURCE — в сборках с этой опцией glibc перехватывает некорректное копирование и завершает процесс, предотвращая потенциальную запись за пределы буфера. Это не устраняет отказ в обслуживании, но снижает риск более глубокой эксплуатации.

Хронология раскрытия

По заявлению FoxIO, компания направила уведомление Alibaba 7 апреля через механизм, описанный в политике безопасности проекта (которая обещает ответ в течение трёх рабочих дней), а затем отправила ещё четыре обращения вплоть до 9 мая — ни на одно из них ответа получено не было. После этого исследователь принял решение о публичном раскрытии. Подтверждения этой хронологии со стороны Alibaba нет.

Операторам серверов, использующих XQUIC или Tengine с поддержкой HTTP/3, следует немедленно применить описанные обходные меры — как минимум установить SETTINGS_QPACK_MAX_TABLE_CAPACITY=0. При наличии публичного PoC и отсутствии патча окно для атаки открыто, а стоимость эксплуатации для злоумышленника минимальна: 260 байт трафика, не требующего ни аутентификации, ни нарушения протокола.


CyberSecureFox Editorial Team

Редакция CyberSecureFox освещает новости кибербезопасности, уязвимости, malware-кампании, ransomware-активность, AI security, cloud security и security advisories вендоров. Материалы готовятся на основе official advisories, данных CVE/NVD, уведомлений CISA, публикаций вендоров и открытых отчётов исследователей. Статьи проверяются перед публикацией и обновляются при появлении новых данных.

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.