Как один байт взламывает Citrix NetScaler?

CVE-2026-88772 — критическая уязвимость с оценкой 9,5 по шкале CVSS, найденная в Citrix NetScaler ADC и Citrix NetScaler Gateway. Citrix уже выпустила исправление, но уязвимость успели задействовать в реальных атаках. Она доступна до аутентификации: злоумышленнику не нужны учётные данные, чтобы отправить вредоносный DTLS-трафик и добраться до исполнения кода. Возможные последствия — удалённое выполнение кода (RCE), отказ в обслуживании (DoS) и запуск произвольного шелл-кода с правами root.
Как один байт взламывает Citrix NetScaler?
Изображение носит иллюстративный характер

Причина CVE-2026-88772 — выход за границы буфера при обработке Datagram Transport Layer Security (DTLS) внутри NetScaler Packet Processing Engine, или NSPPE. Агентство по кибербезопасности и защите инфраструктуры США (CISA) описало ошибку так: «Citrix NetScaler ADC и NetScaler Gateway содержат уязвимость, связанную с ненадлежащим ограничением операций в пределах буфера памяти, которая может привести к удалённому выполнению кода или отказу в обслуживании».
Специалисты компании watchTowr, занимающейся превентивным управлением внешними рисками, установили, что NSPPE без должной проверки доверяет значению поля fragment_length в заголовке рукопожатия DTLS. Вредоносная запись объявляет размер фрагмента равным одному байту, хотя поле length сообщает о полном сообщении длиной 120 байт. Для обработчика фрагмент выглядит крошечным, но фактически NetScaler сохраняет и позднее копирует почти всю полученную запись.
Исследователь безопасности Sina Kheirkhah разобрал схему на 120-байтовом сообщении рукопожатия. Оно передаётся 120 отдельными фрагментами; в каждом указаны length=120 и fragment_length=1. Смещения последовательно принимают значения от 0 до 119. Получив байт для каждой позиции, сервер считает сообщение собранным. «Например, 120-байтовое сообщение рукопожатия может прийти в виде 120 фрагментов. У каждого фрагмента length=120, но fragment_length может быть равен 1. Их смещения составят 0, 1, 2 и так далее до 119. Когда получена каждая позиция, сервер считает 120-байтовое сообщение завершённым. Соединение этих частей называется повторной сборкой», — пояснил Kheirkhah.
Ловушка спрятана в разнице между логическим размером фрагмента и объёмом реально сохранённых данных. Размер каждого принятого пакета составляет 1459 байт. Пакеты помещаются в NetScaler Buffers (NSBs), после чего содержимое цепочки NSB сшивается в единый временный буфер размером 35 840 байт. Уязвимая версия NetScaler перед очередным копированием не проверяет, осталось ли там достаточно места.
После 120 вредоносных записей сервер полагает, что восстановил сообщение размером всего 120 байт. Между тем цепочка NSB содержит около 174 КБ. Следующее копирование выходит далеко за границу выделенных 35 840 байт и повреждает соседние области памяти. Kheirkhah сформулировал расхождение так: «Вредоносные записи сообщают коду повторной сборки, что каждая запись добавляет лишь один байт к 120-байтовому сообщению рукопожатия. Однако NSPPE сохраняет почти всю запись в NSB. После 120 записей сообщение рукопожатия считается завершённым, хотя его цепочка NSB содержит около 174 КБ данных».
watchTowr удалось превратить переполнение в управляемую эксплуатацию. Повреждение памяти позволяет перенаправить ход выполнения программы на шелл-код злоумышленника и получить права root. Для обхода защиты NX (no-execute), запрещающей исполнять код из областей памяти с данными, эксплойт использует системный вызов mprotect() и меняет права нужного участка памяти. В результате одна специально составленная последовательность DTLS-записей проходит путь от неаутентифицированного сетевого запроса до привилегированного выполнения машинного кода.
Подробности CVE-2026-88772 были опубликованы через день после того, как watchTowr выпустила proof-of-concept (PoC), то есть демонстрационный эксплойт, для другой ошибки — CVE-2026-88771. Обе уязвимости уже применялись вместе в атаках на работающие системы. Абсолютные календарные даты этих двух публикаций не указаны; достоверно известен интервал между ними — один день.
Для Citrix NetScaler ADC и Citrix NetScaler Gateway одной фильтрации входа по учётным данным недостаточно: CVE-2026-88772 срабатывает раньше проверки пользователя. Приоритетные меры — установка патча Citrix, ограничение доступности DTLS на внешних интерфейсах там, где он не нужен, и проверка устройств на признаки уже состоявшейся компрометации. Перезагрузка без обновления не устраняет ошибку NSPPE, а закрытие только CVE-2026-88771 оставляет второй путь атаки открытым.


Новое на сайте

Ссылка