Назад к блогу

CVE-2026-88772 в Citrix NetScaler: переполнение буфера в DTLS, веб-шеллы и закрепление root-доступа

CVE-2026-88772 в Citrix NetScaler: переполнение буфера в DTLS, веб-шеллы и закрепление root-доступа

Критическая уязвимость CVE-2026-88772 в Citrix NetScaler позволяет неаутентифицированным злоумышленникам получить root-доступ через переполнение буфера в обработке DTLS, причём атаки начались ещё до публичного раскрытия. Разбираем механику эксплойта, техники маскировки веб-шеллов под легитимные ресурсы и методы закрепления в системе — на фоне истории предыдущих компрометаций NetScaler.

В воскресенье Citrix раскрыла две уязвимости в NetScaler ADC и Gateway — CVE-2026-88771 и CVE-2026-88772; некоторые исследователи назвали их «PitScaler». CVE-2026-88772 — переполнение памяти в обработке протокола DTLS в NetScaler Packet Processing Engine (NSPPE), которое может приводить к удалённому выполнению кода или отказу в обслуживании. Уязвимость получила оценку CVSS 9.5.

Атаки с эксплуатацией начались как минимум в начале сентября: 24 сентября GreyNoise наблюдала попытку эксплуатации NetScaler Gateway — за три дня до публичного раскрытия. Технические детали эксплойта были обнародованы 30 сентября 2026 года.

Что именно изменилось

CVE-2026-88772 относится к классу переполнения буфера и классифицируется как improper restriction of operations within the bounds of a memory buffer (CWE-119). Корень проблемы — в разборе DTLS-рукопожатия. NetScaler неявно доверяет полю fragment_length в заголовке, тогда как поле length в том же заголовке заявляет полную длину сообщения. В разобранном примере fragment_length равен 1 байту, а length — 120 байтам.

Это несоответствие позволяет собрать запись, которая выглядит маленькой, но фактически копирует в буфер значительно больше данных. 120-байтовое сообщение рукопожатия может прийти как 120 фрагментов, каждый с length=120 и fragment_length=1.

Механика переполнения привязана к тому, как пакеты складываются в буфер:

Каждый пакет 1 459 байт → NSB → общий scratch buffer 35 840 байт

Проверки на то, поместится ли следующий пакет в scratch buffer, в уязвимой версии нет — данные пишутся за границу буфера. Переполнение позволяет перенаправить поток управления на произвольный shellcode с root-привилегиями, обходя NX-защиту через системный вызов, снимающий этот запрет для нужной области памяти. Эксплуатация происходит до аутентификации и даёт выполнение кода с root-уровнем на базовой платформе FreeBSD.

Как выглядит пост-эксплуатация

Mandiant описывает, что эксплойты обходят аутентификацию и вызывают неожиданное завершение NSPPE, давая атакующим доступ уровня root.

Дальше в дело вступает Perl-скрипт update_c08937.pl. Он правит /flash/nsconfig/ns.conf, чтобы создать локальную учётную запись sec_monitor с ролью суперпользователя. Веб-шелл маскируется под легитимные ресурсы: скрипт меняет /etc/httpd.conf, включая выполнение PHP и привязывая шелл к URL, похожим на CSS-ресурсы NetScaler. Сам PHP-шелл размещается по пути /var/netscaler/logon/LogonPoint/.local_journal и служит для удалённого выполнения команд, а также загрузки и скачивания файлов.

В разных вторжениях маскировка отличалась. В одном случае /etc/httpd.conf правили так, чтобы .deb-файлы исполнялись как PHP — это позволяло запускать шеллы из каталогов с клиентским ПО NetScaler. В других атаках использовали .sig-файлы и настраивали веб-сервер так, что запросы к .ico в /vpn/media/ перенаправлялись на вредоносные PHP-файлы; тогда обращения к шеллу выглядели как запросы картинок или CSS, а команды выполнялись средствами PHP.

Чтобы закрепиться на уровне root, злоумышленники устанавливали бит setuid на /bin/sh — команды веб-шеллов обычно запускаются под менее привилегированной учётной записью веб-серверов NetScaler. Изменения конфигурации применяли перезагрузкой устройства или перезапуском веб-сервера. Для снижения следов скрипт архивировал /flash/nsconfig в /tmp/update_result_3567cs.tgz, загружал архив на внешний сервер, затем удалял архив и стирал сам себя.

Предыстория

NetScaler эксплуатируют не впервые. Схожим образом работали CVE-2019-19781 (Path Traversal RCE, «Shitrix»), CVE-2022-27510 (Authentication Bypass), CVE-2022-27518 (Unauthenticated RCE через SAML) и CVE-2023-3519 (Unauthenticated RCE, переполнение стека) — все отмечены как эксплуатируемые в реальных атаках и имеют публичные PoC.

Для поиска следов эксплуатации CVE-2023-3519 инструмент citrixscan проверяет пути, связанные с известной постэксплуатационной активностью, в первую очередь из кампаний, описанных в CISA Advisory AA23-201A. Это внешние HTTP-проверки: инструмент обращается по заранее заданному списку адресов, оставшихся от прошлых вторжений, и по ответу устройства судит, есть ли на нём следы такой активности. Совпадение пути или содержимого требует подтверждения аналитиком, а чистый результат не доказывает отсутствие компрометации.

Инструмент citrixInspector после точного определения сборки проверяет её сразу по 10 CVE, включая CVE-2023-3519, CVE-2025-5349/5777 («CitrixBleed 2»), CVE-2025-6543, CVE-2025-7775/7776/8424 («CitrixBleed 3»), CVE-2026-8452 и CVE-2026-88771/88772. Для идентификации сборки он использует фингерпринтинг по GZIP-таймстампу: устройство отдаёт сжатый языковой ресурс /vpn/js/rdx/core/lang/rdx_en.json.gz, и время его сборки, записанное в самом файле, сопоставляется с известными версиями прошивки. Дополнительно он разбирает /vpn/pluginlist.xml для более точной проверки патча.

До появления CVE-2026-88772 применялись три основных метода фингерпринтинга версий. Первый — извлечение GZIP-таймстампа: сканер запрашивает сжатый языковой ресурс, в GZIP-заголовке которого байты 4–7 (MTIME) хранят время модификации, сопоставляемое с известной сборкой через встроенную таблицу из 228 записей. Второй — опрос NITRO API по путям /nitro/v1/config/nsversion и /nsversion; некоторые устройства возвращают версию без аутентификации, но сканер требует успешного ответа и отбрасывает содержимое страницы входа или ошибки. Третий — анализ HTTP-заголовков ответа: Server, X-NS-version, X-Citrix-Version, Via и X-NS-Build по всем проверяемым эндпоинтам. Если сборка сжата с gzip -n (обнуляющим MTIME) или её таймстамп отсутствует в таблице, сканер переходит к другим источникам версии; при отсутствии идентификации версия остаётся неизвестной.

Почему это сделали и почему это опасно

Эксплуатация изначально даёт root-привилегии, но команды, выполняемые веб-шеллами, обычно запускаются под менее привилегированной учётной записью. Именно поэтому злоумышленники отдельно выставляли бит setuid на /bin/sh — чтобы закрепить постоянное выполнение на уровне root для веб-шеллов. Устройства NetScaler ADC и Gateway привлекательны как цели: они доступны из интернета и часто находятся на границе внутренних сетей, не имея преимуществ EDR-ПО.

Что это меняет на практике

CISA предписывает применять митигации по инструкциям вендора и соблюдать требования по forensic triage. Запуск предоставленных IoC в консоли NetScaler может помочь выявить признаки эксплуатации; клиенты обязаны провести forensic triage и следовать опубликованным Citrix рекомендациям по митигациям. Если митигации недоступны, следует прекратить использование продукта.

Первые исправленные сборки:

ВеткаИсправленная сборка
NetScaler ADC и NetScaler Gateway 14.114.1-73.37
NetScaler ADC и NetScaler Gateway 13.113.1-64.23
NetScaler ADC 14.1-FIPS14.1-73.37 FIPS
NetScaler ADC 13.1-FIPS и 13.1-NDcPP13.1-37.279

Для проверки в консоли NetScaler рекомендуются IoC, связанные с пост-эксплуатационной активностью, в первую очередь из кампаний по CVE-2023-3519, описанных в CISA Advisory AA23-201A. Сканер проверяет 15 путей, ассоциированных с пост-эксплуатационной активностью, и 12 путей на предмет ошибок конфигурации — включая доступность NITRO API, интерфейс управления, конфигурационные и лог-файлы, а также диагностические данные. Обнаружение подозрительного содержимого требует валидации аналитиком, а чистый результат не доказывает отсутствие компрометации.

Ограничения и открытые вопросы

Авторы citrixscan признают: на укреплённых устройствах пути к ресурсам, включая статические файлы, могут быть закрыты аутентификацией, поэтому версия остаётся неизвестной. В таком случае инструмент сохраняет диагностику GZIP-пробы и рекомендует владельцу аутентифицироваться и выполнить show ns version, чтобы подтвердить статус патча. Каждый сигнал версии — это свидетельство о полученном ответе, а не доказательство, что все устройства за адресом пропатчены. Если сигналы расходятся, следует сохранить каждое значение и сообщать unknown/conflicting до проверки владельцем.

citrixInspector ограничивается тем, что при невозможности определить точную сборку переходит к эвристикам по заголовку, иконкам, комментарию и заголовкам, ограниченным только CVE-2023-3519. Инструмент также указывает, что версия EPA-клиента, дата сертификата или отсутствующий ресурс не могут установить сборку прошивки NetScaler.

По данным eSentire, эксплуатация наблюдалась до и после публичного раскрытия, причём часть активности после раскрытия происходила примерно в течение 24 часов — что показывает, как быстро злоумышленники атакуют интернет-доступные устройства, как только детали уязвимости или код proof-of-concept становятся публичными.

Источники

Похожее