Контрабанда HTTP-запросов в NetScaler ADC и NetScaler Gateway открывает путь к выполнению произвольного кода

vulnerability

Часть тела HTTP-запроса к NetScaler ADC (ранее Citrix ADC) и NetScaler Gateway (ранее Citrix Gateway) может дойти до сервера как самостоятельный запрос. Так проявляется рассинхронизация разбора: NetScaler и сервер за ним читают один поток байтов, но по-разному определяют, где заканчивается запрос. Атакующий, действующий по сети, может получить выполнение произвольного кода. Уязвимость затрагивает ветки 13.1 и 14.1 в NetScaler ADC и NetScaler Gateway, включая сертификационные сборки FIPS и NDcPP.

Как работает рассинхронизация разбора запросов в NetScaler

NetScaler ADC - контроллер доставки приложений, то есть балансировщик нагрузки, принимающий веб-трафик, а NetScaler Gateway закрывает доступ к виртуальной среде. Банк данных угроз безопасности информации (BDU) учитывает уязвимость под номером BDU:2026-17773. В реестре CVE (общий каталог идентификаторов уязвимостей) у неё номер CVE-2026-88773. Производитель статус подтвердил. Уровень опасности BDU оценивает как критический: базовая оценка по CVSS 3.1 составляет 10 из 10.

Для атаки достаточно доступа по сети к HTTP-виртуальному серверу, то есть к настроенной точке приёма трафика: учётные данные не нужны, участие пользователя не требуется, подходят настройки по умолчанию. Причина в разборе передачи данных блоками (фрагментированной передачи): клиент указывает размер очередного блока в шестнадцатеричном виде. Размер накапливается в 32-битном счётчике без проверки переполнения, поэтому длинное число молча обрезается до маленького. Проверка отбраковывает только значения из верхней половины диапазона, так что обрезанное число проходит как обычный размер.

NetScaler передаёт разметку блоков серверу без изменений, однако границу запроса определяет по своему обрезанному значению. В итоге запрос завершается раньше времени, а оставшиеся байты уходят в очередь как следующий запрос по тому же соединению. Дальнейшее зависит от сервера: если тот обрезает размер так же, подставленные байты выполняются как самостоятельный запрос. Так получается перехват префикса, когда чужой запрос встраивается перед легитимным. Если сервер считает правильно, он ждёт тело в несколько гигабайт, которого не будет: соединение зависает, а свободные подключения к серверу постепенно заканчиваются.

В обоих случаях второго запроса атакующий не отправляет: его роль играют байты тела. Публичный эксплойт, то есть код для использования уязвимости, существует; ссылку на него приводит BDU. Сведений о применении в реальных атаках в исходных данных нет. Публикация деталей и реальная эксплуатация не одно и то же: описание техники не подтверждает, что её уже используют.

Вендор закрыл уязвимость в сборках 14.1-73.37 и 13.1-64.23; всё более раннее в этих ветках остаётся уязвимым. Для сертификационных сборок FIPS и NDcPP нумерация своя, номера исправленных версий приведены в статье CTX697096. Патч вводит верхний предел на размер блока и отвергает слишком большие значения как некорректные. Предел в 128 МБ отсекает такие запросы до того, как счётчик успевает переполниться. Кроме того, проверка конфликта способов указания длины тела запроса стала безусловной.

BDU фиксирует, что уязвимость устранена, а способ устранения - обновление программного обеспечения. Обходных мер в записи не приведено, поэтому других вариантов, кроме установки исправленных сборок, нет. Установкам на периметре, которые принимают трафик из интернета, это нужно в первую очередь. После обновления номера сборок сверяют со статьёй CTX697096. Опасность в том, что атака не требует учётных данных, работает при настройках по умолчанию, а публичный эксплойт уже доступен.

Ссылки

Комментарии: 0