В воскресенье Citrix раскрыла две уязвимости в NetScaler ADC и Gateway — CVE-2026-88771 и CVE-2026-88772; некоторые исследователи назвали их «PitScaler». CVE-2026-88772 — переполнение памяти в обработке протокола DTLS в NetScaler Packet Processing Engine (NSPPE)Компонент Citrix NetScaler, отвечающий за обработку сетевых пакетов, в том числе протокола DTLS, и ставший местом уязвимости CVE-2026-88772., которое может приводить к удалённому выполнению кода или отказу в обслуживании. Уязвимость получила оценку CVSSстандартизированная шкала оценки критичности уязвимостей от 0 до 10 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.1 | 14.1-73.37 |
| NetScaler ADC и NetScaler Gateway 13.1 | 13.1-64.23 |
| NetScaler ADC 14.1-FIPS | 14.1-73.37 FIPS |
| NetScaler ADC 13.1-FIPS и 13.1-NDcPP | 13.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 становятся публичными.
Источники
- github.com/…/README.md
- www.bleepingcomputer.com/news/security/hackers-exploit-citrix-netscaler-zero-day-to-deploy-web-shells/
- thehackernews.com/…/citrix-netscaler-cve-2026-88772-exploit.html
- www.cisa.gov/…/known-exploited-vulnerabilities-catalog
- thehackernews.com/…/citrix-netscaler-post-exploitation.html
- github.com/…/README.md