Статья CVE-2026-28318: неаутентифицированный DoS в SolarWinds Serv-U через Content-Encoding: deflate

Стеклянный сосуд под давлением с трещиной, из которой вырывается сжатый воздух. На поверхности выгравирована надпись «CVE-2026-28318 · DEFLATE DoS», внутри тлеет красное свечение.


Четвёртое попадание SolarWinds Serv-U в каталог CISA KEV за пять лет. CVE-2026-28318 добавлена 5 июня 2026 года с дедлайном 19 июня - четырнадцать дней на реакцию. Механика до обидного простая: один неаутентифицированный POST с заголовком Content-Encoding: deflate и любым мусором в теле роняет сервис целиком. CVSS 7.5 (HIGH), EPSS 0.1066 в Top 5% - вероятность эксплуатации в ближайшие 30 дней около 10.7%. CISA подтвердила активную эксплуатацию in the wild. Когда на внешнем пентесте встречаю Serv-U на периметре, первым делом проверяю версию - этот продукт ломают системно, и каждый раз по-новому - полный цикл от анализа CVE до рабочего шелла я разобрал в руководстве по разработке эксплойтов.

Бизнес-логика: зачем атакующему отказ в обслуживании FTP-сервера​

Serv-U - не рядовой FTP-сервер. Это managed file transfer (MFT) для организаций, которым нужна контролируемая передача файлов с аудитом: финансы, здравоохранение, госструктуры. Веб-интерфейс Serv-U включён по умолчанию и регулярно торчит на внешнем периметре - именно он становится точкой входа для CVE-2026-28318.

Неаутентифицированный DoS на файловом сервере в enterprise-среде - это не абстрактная "проблема доступности". Вот что происходит на практике:

Автоматизированные файловые обмены между контрагентами встают. В финансовом секторе задержка расчётов - прямой убыток. По данным HelpNetSecurity, DoS-уязвимость в Serv-U может использоваться для отвлечения SOC от параллельной скрытой активности. Пока blue team разгребает упавший сервис, атакующий работает по другому вектору. Плюс многократный краш и перезапуск дают разведданные: как быстро срабатывает мониторинг, есть ли автоматический рестарт, меняется ли конфигурация после инцидента.

С точки зрения kill chain, CVE-2026-28318 ложится в фазу Impact - Application or System Exploitation (T1499.004). Но в реальных кампаниях DoS работает как обеспечивающий элемент: разведка поверхности атаки через сканирование уязвимостей (T1595.002, Reconnaissance) -> эксплуатация публичного приложения (T1190, Initial Access) через другую уязвимость -> DoS как прикрытие или давление. CISA отмечает, что вектор полностью автоматизируем (SSVC: automatable - yes), так что массовое сканирование и эксплуатация тривиальны.

Анатомия SolarWinds Serv-U DoS уязвимости: от заголовка до heap corruption​

1783109249038.webp

Согласно исследованию Bishop Fox, корневая причина CVE-2026-28318 - проверка безопасности, привязанная к неправильному условию. Веб-сервер Serv-U должен отклонять запросы с Content-Encoding: deflate, но код, который это делает, выполняется только когда HTTP-компрессия отключена. По умолчанию компрессия включена - проверка пропускается, и тело запроса с заголовком deflate попадает напрямую в декомпрессор.

Дальше цепочка такая:
  1. Декомпрессор получает тело запроса и начинает обработку
  2. Ошибка управления буфером вызывает free() на interior pointer - указатель, который не должен освобождаться
  3. Hardened system allocator обнаруживает heap corruption
  4. Аллокатор вызывает аварийное завершение всего процесса Serv-U
Тело запроса не обязано быть валидными сжатыми данными - хватит любого непустого содержимого. Это не compression bomb в классическом смысле (когда маленький архив распаковывается в гигабайты), а ошибка в обработке заголовка, ведущая к повреждению кучи и крэшу.

Интересный момент: NVD и SolarWinds классифицируют уязвимость как CWE-400 (Uncontrolled Resource Consumption). По анализу Bishop Fox, фактический механизм - повреждение кучи с аварийным завершением. CWE-400 описывает исчерпание ресурсов, а здесь процесс просто прекращает существование. Для пентестера разница существенна: resource exhaustion детектируется по росту CPU/RAM до падения, а крэш от invalid free - нет. Процесс исчезает мгновенно.

Патч в 15.5.4 HF1 не исправляет сам декомпрессор. Вместо этого добавлен универсальный фильтр: любой запрос с телом и непустым заголовком Content-Encoding отклоняется с кодом 415 Unsupported Media Type до обработки тела. SolarWinds прямо указывает, что Content-Encoding "не требуется сервису". Этот фильтр - ключ к безопасному обнаружению уязвимых хостов.

CVSS-вектор и место в MITRE ATT&CK​

Вектор CVSS:3.1 - AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H. Разберём компоненты:

КомпонентЗначениеИнтерпретация
AV:NNetworkАтака по сети, физический доступ не нужен
AC:LLowНикаких особых условий, работает на дефолтной конфигурации
PR:NNoneАутентификация не требуется
UI:NNoneДействия пользователя не нужны
S:UUnchangedВоздействие ограничено самим Serv-U
C:N / I:NNoneКонфиденциальность и целостность не страдают
A:HHighПолная потеря доступности

Маппинг на MITRE ATT&CK:
CISA SSVC-решение: Attend (патчить в обычном цикле). Параметры: exploitation - active, automatable - yes, technical impact - partial. Для сравнения, CVE-2021-35211 (RCE в том же Serv-U) получила решение Act (патчить немедленно) с technical impact - total. Разница между DoS и полной компрометацией сервера отражается в приоритизации, но "Attend" при активной эксплуатации - не повод откладывать.

Fingerprinting уязвимого Serv-U: безопасное обнаружение без краша​

1783109496826.webp

[Применимо: внешний пентест, все версии Serv-U до 15.5.4 включительно]

На реальном пентесте ронять production-сервис для проверки гипотезы - не вариант. Bishop Fox разработала метод безопасного детектирования, основанный на поведенческой разнице патченного и непатченного Serv-U.

Логика простая: патч в HF1 добавляет фильтр, который отклоняет любой заголовок Content-Encoding, не только deflate. Отправляем POST с безопасным значением Content-Encoding: identity (identity = "без преобразования", запрос не затрагивает декомпрессор и не вызывает крэш), и смотрим на ответ:
  • Патченный сервер (15.5.4 HF1+): вернёт 415 Unsupported Media Type
  • Уязвимый сервер (до 15.5.4): обработает запрос нормально, сервис останется в работе
Bash:
curl -sk -X POST https://target:443/ -H "Content-Encoding: identity" -d "probe" -o /dev/null -w "HTTP %{http_code}\n"
# 415 = патчен (HF1+), иной код = потенциально уязвим
Запрос никогда не отправляет deflate, декомпрессор не вызывается, крэша не будет. Bishop Fox выпустила готовый инструмент для массовой проверки - BishopFox/CVE-2026-28318-check на GitHub.

Ограничения fingerprinting: если между вами и Serv-U стоит WAF или реверс-прокси, самостоятельно обрабатывающий Content-Encoding, результат может быть ложноотрицательным. Проверяйте по серверным заголовкам и баннеру, что ответ приходит от Serv-U, а не от промежуточного узла.

Для поиска экземпляров Serv-U в scope - стандартные методы: nmap -sV на портах 443 (веб-интерфейс), 21/22 (FTP/SFTP), Shodan/Censys для внешней разведки.

Воспроизведение deflate bomb атаки в изолированной лабе​

Требования к окружению:
  • ОС: Windows Server 2016/2019/2022 или GNU/Linux (Serv-U поддерживает обе платформы)
  • RAM: минимум 2 ГБ для VM с Serv-U
  • SolarWinds Serv-U версии 15.5.4 или ниже (триальная версия на сайте SolarWinds)
  • Веб-интерфейс Serv-U включён (по умолчанию - да, проверить в настройках)
  • Изолированная сеть, без доступа к production-системам
Структура запроса, вызывающего крэш (использовать только в авторизованной лабе):
Код:
POST / HTTP/1.1
Host: target
Content-Encoding: deflate
Content-Length: 4

test
Тело может быть любым непустым содержимым - валидные deflate-данные не требуются. После отправки процесс Serv-U завершится аварийно. В логах Windows - событие завершения процесса, в GNU/Linux - аналогичная запись.

Если на сервере настроен автоматический рестарт сервиса, повторный запрос после подъёма снова вызывает крэш. Единичный DoS превращается в устойчивый отказ в обслуживании. Публичный PoC доступен в репозитории EaEa0001/servu-cve-2026-28318-poc на GitHub - описание root cause и DoS-only эксплойт.

Когда техника НЕ работает:
  • Serv-U 15.5.4 HF1 (build 15.5.4.125) и выше - фильтр отклоняет запрос до декомпрессора
  • WAF или реверс-прокси перехватывает и стрипает Content-Encoding: deflate до Serv-U
  • HTTP-компрессия явно отключена в настройках Serv-U - в этом случае штатная проверка на deflate срабатывает корректно, но это нетипичная конфигурация; по умолчанию компрессия включена

Границы эксплуатации: почему Content-Encoding deflate эксплойт не ведёт к RCE​

1783109746431.webp

Heap corruption - классическая первая ступенька к remote code execution. Атакующий контролирует, какой кусок памяти освобождается, данные рядом с ним - стандартный набор для exploitation. Bishop Fox копнула в три направления и доказала, что каждое упирается в тупик:
  1. Контролируемый free() по произвольному адресу. Удалось обойти защитную проверку аллокатора, но структура запроса вынуждает одно из ключевых значений быть больше всего адресного пространства процесса. Результат: либо ничего не происходит, либо крэш без контроля. Прицельная эксплуатация невозможна.
  2. Подмена метаданных соседнего блока кучи. Классический follow-up после контролируемого free - но то же ограничение: невозможно большое значение сдвигает вычисление далеко за пределы валидной памяти.
  3. Integer overflow в декомпрессоре. Счётчик размера слишком мал и переполняется на больших данных. Дефект реальный, но запрашиваемый и копируемый размеры управляются одним и тем же сломанным счётчиком - они ошибаются синхронно. Итог: запрос невозможного объёма памяти и крэш, а не контролируемая запись.
По заключению Bishop Fox: полностью исключить существование пути к RCE нельзя, но все очевидные маршруты закрыты спецификой самого бага. Оценка вендора - DoS only - подтверждена независимым реверс-инжинирингом.

Для пентестера это означает: CVE-2026-28318 - инструмент impact, а не initial access. Нужен shell на сервере - ищите другие векторы. Непатченный Serv-U с высокой вероятностью уязвим и к более ранним CVE, о которых ниже.

Митигация: SolarWinds Serv-U патч и блокировка на WAF​

Чеклист для передачи администратору:
  1. Обновить Serv-U до 15.5.4 HF1 (build 15.5.4.125) или выше. Все версии до 15.5.4 включительно уязвимы. Если стоит 15.5.4 - HF1 ставится поверх.
  2. Если патч невозможен прямо сейчас - заблокировать на WAF или реверс-прокси POST-запросы с заголовком Content-Encoding к Serv-U. SolarWinds подтверждает, что эта функциональность не требуется сервису. Условие правила: метод POST + наличие заголовка Content-Encoding -> deny или 403.
  3. Ограничить сетевой доступ к веб-интерфейсу Serv-U только доверенными IP. Веб-интерфейс не нужен внешним пользователям - закрыть с периметра.
  4. Проверить все экземпляры Serv-U в инфраструктуре, включая внутренние. Для массовой проверки - BishopFox/CVE-2026-28318-check (безопасный, не вызывает крэш).
  5. Настроить мониторинг крэшей процесса Serv-U. Аварийное завершение без штатного shutdown - индикатор попытки эксплуатации или состоявшейся атаки.
SolarWinds публикует готовые WAF-правила для основных вендоров в Trust Center - проверяйте наличие правил под вашу инфраструктуру.

Serv-U и CISA KEV 2026: паттерн критических уязвимостей FTP-сервера​

📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

На пентесте, обнаружив Serv-U, проверяйте не только CVE-2026-28318. Если сервер не обновлён до HF1 - высока вероятность, что и более ранние патчи пропущены. CVE-2024-28995 (path traversal) в сочетании с DoS даёт и утечку данных, и отказ в обслуживании на одном хосте. В отчёте это уже совсем другая картина.

DoS с CVSS 7.5 на первый взгляд - проблема второго приоритета. Нет утечки данных, нет выполнения кода, нет lateral movement. На практике всё иначе. На четырёх из пяти внешних пентестов, где я встречал Serv-U, сервис стоял на дефолте: веб-интерфейс наружу, компрессия включена, WAF отсутствует. Один запрос - и MFT лежит. В организациях, где файловый обмен привязан к SLA с контрагентами, это прямой финансовый ущерб, а не запись в журнале инцидентов.

Bishop Fox потратила время, чтобы доказать: RCE из этого бага не выйдет. Три направления, три тупика - и это ценный результат для всей индустрии. Без такого анализа каждый второй отчёт о CVE-2026-28318 содержал бы спекуляции о "потенциальном RCE при определённых условиях". Теперь есть верифицированный ответ: heap corruption реальна, но заблокирована спецификой самой ошибки.

Меня беспокоит не конкретная CVE, а тенденция. Четвёртый раз за пять лет один и тот же продукт попадает в каталог CISA KEV. Среди попавших - RCE с EPSS 0.91, которую использовали для шпионажа и развёртывания ransomware (CVE-2021-35211, SSVC: Act), и path traversal с EPSS 0.99, эксплуатировавшаяся массово (CVE-2024-28995). SolarWinds чинит каждый баг по отдельности, но паттерн указывает на системную проблему в кодовой базе Serv-U. Если в ближайшие два года появится пятая KEV - вопрос о замене продукта станет рациональнее вопроса о патче.
 
Последнее редактирование:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab