Разбор эксплойта Citrix NetScaler: путь от DTLS-пакета до кода с правами root
Исследователи в области кибербезопасности раскрыли технические подробности недавно исправленной критической уязвимости в Citrix NetScaler ADC и Gateway, которая уже находится под активной эксплуатацией.
Уязвимость получила идентификатор CVE-2026-88772 и оценку 9,5 по шкале CVSS. Она описана как переполнение памяти при обработке протокола DTLS (Datagram Transport Layer Security), корни которого лежат в движке обработки пакетов NetScaler — NSPPE. По формулировке американского агентства CISA, речь идёт о некорректном ограничении операций в границах буфера памяти, что может привести к удалённому выполнению кода или отказу в обслуживании.
В чём суть ошибки
По данным компании watchTowr, NetScaler безоговорочно доверяет значению fragment_length в заголовке DTLS-рукопожатия — а оно может быть равно всего одному байту, тогда как поле длины в том же заголовке заявляет, что полное сообщение занимает 120 байт. Это расхождение при разборе позволяет злоумышленнику собрать вредоносную запись, которая выглядит крошечной, хотя фактически в буфер копируется куда больше данных.
Исследователь Сина Кхейрках объясняет механику наглядно: 120-байтное сообщение рукопожатия может прийти в виде 120 фрагментов. У каждого фрагмента поле длины равно 120, но fragment_length — единице, а смещения идут от 0 до 119. Когда все позиции заполнены, сервер считает сообщение полным. Этот процесс сборки называется реассемблированием.
Как это превращается в переполнение
Каждый принятый пакет размером 1459 байт хранится в буферах NetScaler (NSB), а затем сшивается в единый рабочий буфер объёмом всего 35 840 байт. Уязвимая версия не проверяет, поместится ли очередной пакет, поэтому данные записываются за пределы буфера. По словам Кхейрках, вредоносные записи сообщают коду сборки, что каждая запись поставляет лишь один байт из 120, но NSPPE удерживает в NSB почти всю запись целиком. После 120 таких записей сообщение считается полным, а цепочка NSB содержит около 174 КБ данных.
Анализ watchTowr показал, что это переполнение можно направить на выполнение произвольного шелл-кода с правами root: с помощью системного вызова mprotect() обходится защита NX, запрещающая исполнение кода в памяти данных.
Публикация вышла на следующий день после того, как та же компания выложила proof-of-concept для смежной уязвимости CVE-2026-88771, которую в реальных атаках применяли в связке с CVE-2026-88772.
Источник: The Hacker News
Комментарии
Войдите, чтобы комментировать.