CVE-2026-28318: SolarWinds Serv-U падает от одного POST-запроса
CVE-2026-28318: SolarWinds Serv-U падает от одного POST-запроса
Представьте: ваш файловый сервер обслуживает сотни корпоративных клиентов — передаёт финансовые отчёты, резервные копии, документы. В 3 ночи кто-то отправляет один HTTP-запрос. Serv-U падает. Все передачи файлов останавливаются. Утром начинается звонок от клиентов.
Именно так работает CVE-2026-28318 — уязвимость типа Denial of Service в SolarWinds Serv-U, получившая CVSS 7.5 (High). Классификация по CWE-400: Uncontrolled Resource Consumption. Патч вышел 4 июня 2026 года — Serv-U 15.5.4 Hotfix 1. Уже 5 июня CISA добавила CVE-2026-28318 в каталог Known Exploited Vulnerabilities (KEV): уязвимость активно эксплуатируется в реальных атаках.
Уязвимость срабатывает через специально сформированный POST-запрос с заголовком Content-Encoding: deflate. Никакой аутентификации. Никакого взаимодействия с пользователем. Никаких привилегий. Сервис падает.
ЧТО ТАКОЕ SERV-U
Если вы работаете в enterprise-инфраструктуре, вы почти наверняка сталкивались с задачей: как передать большой файл между двумя компаниями безопасно, надёжно, с логированием и контролем доступа — и чтобы это работало и через FTP-клиент бухгалтера 2006 года выпуска, и через современный HTTPS-браузер. SolarWinds Serv-U закрывает именно эту нишу. Это Managed File Transfer (MFT) сервер для Windows и Linux, поддерживающий FTP, FTPS, SFTP, HTTP и HTTPS одновременно. Банки передают через него выписки в процессинговые центры. Больницы — DICOM-снимки между клиниками. Производственные компании — EDI-документы партнёрам по цепочке поставок. Serv-U — это инфраструктура, которая работает в фоне и о которой вспоминают только тогда, когда она падает.
Именно поэтому Serv-U традиционно смотрит в интернет — по-другому не работает. По данным Shodan, сейчас доступны более 12 000 серверов Serv-U с открытым сетевым доступом. Shadowserver фиксирует около 3 100. Разница в цифрах объясняется методологией сканирования, но суть одна: тысячи установок Serv-U достижимы из любой точки интернета, и многие из них ещё не получили патч.
Для атакующего Serv-U — лакомая цель с историей. В 2021 году китайская государственная группировка DEV-0322 первой эксплуатировала CVE-2021-35211 — RCE в Serv-U — как zero-day ещё до публикации патча. Позже ту же уязвимость подхватила TA505 (аффилиат Clop/FIN11) для проникновения в корпоративные сети с целью развёртывания ransomware. В 2024 году в активную эксплуатацию ушла ещё одна уязвимость Serv-U, позволявшая обходить пути в файловой системе. Итог на сегодня: CISA внесла в каталог KEV 11 уязвимостей в продуктах SolarWinds. CVE-2026-28318 станет двенадцатой. У исследователей безопасности давно сложилось мнение, что Serv-U проверяется на прочность при каждом удобном случае — и, судя по статистике, не без результата.
КАК РАБОТАЕТ УЯЗВИМОСТЬ
Заголовок Content-Encoding в HTTP — это инструкция серверу: «тело запроса сжато вот этим алгоритмом, распакуй перед обработкой». Один из допустимых значений — deflate, алгоритм сжатия данных на основе LZ77 и кодирования Хаффмана. Логика понятна: клиент сжал данные, чтобы уменьшить трафик, сервер получил и распаковал. Проблема в том, что Serv-U при этой распаковке не ставит никаких ограничений — ни по объёму выделяемой памяти, ни по процессорному времени. Представьте насос без предохранительного клапана: он будет качать, пока не разорвётся.
Классификация CWE-400 (Uncontrolled Resource Consumption) описывает именно этот паттерн: приложение выделяет ресурсы в ответ на входящие данные, но не ограничивает, сколько именно. Атакующий подаёт специально сформированный сжатый payload — и Serv-U начинает безостановочно потреблять память или CPU. Никакого лимита нет, остановки нет, пока сервис не исчерпает доступные ресурсы и не упадёт аварийно. Важно: всё это происходит до аутентификации. Serv-U принимает и начинает обрабатывать запрос ещё до того, как проверяет, кто его прислал. Значит, учётные данные атакующему не нужны вообще.
Техническая простота атаки — одна из причин, почему уязвимость сразу ушла в активную эксплуатацию. Здесь не нужна цепочка уязвимостей, не нужен специализированный инструментарий, не нужно изучать внутреннее устройство системы. Нужен HTTP-клиент и одна строчка заголовка. Порог входа для атакующего — минимальный; порог последствий для жертвы — высокий.
РЕАЛЬНАЯ ЦЕПОЧКА АТАКИ
Всё начинается с Shodan. Поисковый запрос по баннеру Serv-U возвращает тысячи результатов с IP-адресами, портами и версиями. Атакующий выбирает цель — или берёт весь список оптом. Дальше — один HTTP-запрос: POST на любой endpoint Serv-U с заголовком Content-Encoding: deflate и специально подготовленным телом. Никакого логина, никакого сессионного токена. Serv-U принимает запрос, начинает декомпрессию, уходит в потребление ресурсов без остановки. Через несколько секунд или минут — в зависимости от объёма RAM и мощности процессора — сервис падает.
Что в это время видит администратор? Если повезёт — алерт от системы мониторинга о том, что сервис недоступен. Если не повезёт — утренний звонок от пользователей, которые не могут подключиться к FTP. В логах Serv-U — обрыв без внятного сообщения об ошибке, характерный для аварийного завершения процесса. Никакого следа в логах аутентификации, потому что до аутентификации дело не дошло. Установить причину по логам в момент инцидента — нетривиальная задача.
Если Serv-U настроен как системный сервис с автоматическим перезапуском, атакующий просто повторяет запрос. Сервис поднимается — и снова падает. Цикл можно поддерживать сколько угодно долго. Для ботнет-оператора эта атака особенно привлекательна по другой причине: в отличие от volumetric DDoS, которые требуют насыщения канала гигабитами трафика и легко фильтруются на уровне провайдера, здесь достаточно минимального количества правильно сформированных запросов. Ботнет из нескольких сотен узлов, каждый из которых шлёт один запрос в минуту, — и Serv-U в постоянном нокдауне. Никакого объёма, который бы насторожил upstream-провайдера. Тихо и эффективно.
ХРОНОЛОГИЯ
26 февраля 2026 года SolarWinds зарезервировала CVE-идентификатор — значит, уязвимость была обнаружена и сообщена им ещё в феврале, задолго до публичного раскрытия. 3 июня компания опубликовала официальный advisory в Trust Center. 4 июня выпустила патч — Serv-U 15.5.4 Hotfix 1. Промежуток между резервацией CVE и выходом патча составил более трёх месяцев: это стандартный срок для coordinated disclosure, когда исследователь даёт вендору время на исправление до публикации деталей.
5 июня — через один день после выхода патча — CISA добавила CVE-2026-28318 в каталог Known Exploited Vulnerabilities. Это значит, что к моменту публикации патча уязвимость уже эксплуатировалась в реальных атаках. Насколько давно — неизвестно. Не исключено, что атаки начались ещё до публичного раскрытия: в истории MFT-уязвимостей это не редкость. Дедлайн для Federal Civilian Executive Branch агентств США — 19 июня 2026 года согласно директиве BOD 22-01.
ПОЧЕМУ ЭТО ВАЖНО
DoS-уязвимости принято считать менее опасными, чем RCE или LPE: «сервер упал, перезагрузили, работаем дальше». Это ошибочная логика в контексте MFT-сервера. Serv-U — не веб-сайт с красивой картинкой. Это транспорт, на котором едут бизнес-процессы. Банк не может передать выписку в ЦБ. Больница не получает снимки из другого отделения. Завод не отправляет отгрузочные документы клиенту. SLA нарушен. Штраф. Ручная работа по восстановлению. Репутационный ущерб. И всё это — от одного HTTP-запроса, который стоил атакующему ноль усилий.
Есть и более тревожный аспект. Serv-U исторически атакуют не только из хулиганства — его атакуют целенаправленно, за данными. DEV-0322 использовали Serv-U для шпионажа против американских оборонных и технологических компаний. TA505/Clop — как точку входа для развёртывания ransomware и кражи корпоративных файлов. DoS сам по себе может быть разведкой: атакующий проверяет, какие серверы используют Serv-U, насколько быстро реагирует команда безопасности, есть ли автоматический перезапуск. Получив ответы на эти вопросы, он приходит снова — уже с другим инструментом. CISA не добавляет в KEV уязвимости ради галочки. Это сигнал: кто-то уже ломает, и не один.
Отдельный риск — автоматизированные цепочки. Если Serv-U используется как звено в ночном backup-процессе или EDI-интеграции, его недоступность может не обнаружиться сразу. Резервное копирование тихо не выполнилось. EDI-документы не ушли партнёру. Это выяснится через несколько часов или на следующий день — когда последствия уже накопились.
ЧТО ДЕЛАТЬ
Единственное полное исправление — обновление до Serv-U 15.5.4 Hotfix 1. Скачать можно через Customer Portal SolarWinds. Важный нюанс: уязвимы все версии до 15.5.4 включительно, если hotfix не применён. То есть если вы обновились до 15.5.4, но пропустили hotfix — вы всё ещё уязвимы. Именно это может пропустить инвентаризация пакетов, которая видит «15.5.4» и считает версию актуальной. Проверяйте build внутри самого приложения.
Если обновление прямо сейчас невозможно — согласование, технологическое окно, боязнь сломать что-то в production — SolarWinds официально рекомендует два временных митигейшна. Первый: ограничить доступ к Serv-U только доверенными IP-адресами. Если у вас есть список партнёров и клиентов, которые реально подключаются к серверу, — закройте всё остальное на уровне файрвола. Второй: заблокировать любые POST-запросы, содержащие заголовок Content-Encoding. SolarWinds прямо говорит: эта функциональность Serv-U не нужна. Блокировка не затронет легитимный трафик.
Отдельный момент про проверку версии: сделать это из командной строки не получится. Serv-U не регистрируется в системе пакетов — ни dpkg -l, ни rpm -qa его не увидят. Версия смотрится только в веб-интерфейсе администратора: Setup → Information. Обновление устанавливается через собственный инсталлятор SolarWinds, который скачивается с Customer Portal и запускается вручную. Именно поэтому системы автоматической инвентаризации могут показывать устаревшую версию или не видеть Serv-U вообще — проверяйте через интерфейс, руками.
В официальном advisory SolarWinds опубликовала примеры правил для основных WAF и прокси. Advisory приводит для nginx вариант с вложенными if — но nginx вложенные if не поддерживает, это ограничение движка конфигурации. Рабочий вариант — через переменную: устанавливаем её в единицу при совпадении метода и заголовка, затем проверяем в одном if:
set $block_deflate_post 0;
if ($request_method = POST) {
set $block_deflate_post 1;
}
if ($http_content_encoding ~* deflate) {
set $block_deflate_post "${block_deflate_post}1";
}
if ($block_deflate_post = "11") {
return 403;
}
Для ModSecurity с CRS правило работает в фазе 1 (до чтения тела запроса) и использует цепочку: первое правило матчит метод, флаг chain требует совпадения следующего правила. Важно: правило нужно добавить до включения CRS в конфиге, иначе может возникнуть конфликт идентификаторов — id:100100 должен быть свободен:
SecRule REQUEST_METHOD "@streq POST" "id:100100,phase:1,deny,status:403,chain"
SecRule REQUEST_HEADERS:Content-Encoding "@contains deflate"
Если перед Serv-U стоит Cloudflare WAF, правило создаётся как Custom Rule в разделе Security → WAF. Выражение матчит одновременно заголовок и метод, действие — Block:
(http.request.headers["content-encoding"][*] contains "deflate" and http.request.method eq "POST")
Замечание про nftables: он работает на уровне L3/L4 и не имеет доступа к содержимому HTTP-заголовков. Фильтровать по Content-Encoding на уровне nftables невозможно — это задача для WAF или nginx как reverse proxy перед Serv-U. Если nginx уже стоит перед Serv-U — правило выше закрывает вектор полностью.
После применения митигейшна или установки патча стоит проверить логи Serv-U за последние несколько недель на наличие POST-запросов с Content-Encoding: deflate. Если такие запросы есть — попытки уже были, и вопрос в том, были ли они успешными.
ВЫВОДЫ
CVE-2026-28318 — технически простая уязвимость с высокими последствиями в корпоративном контексте. Один запрос, никакой аутентификации, сервис падает. Патч существует, вышел 4 июня — Serv-U 15.5.4 Hotfix 1. CISA подтвердила активную эксплуатацию. Дедлайн для федеральных агентств США — 19 июня.
Если Serv-U есть в вашей инфраструктуре: обновляйте немедленно. Если обновление требует согласования — блокируйте POST-запросы с Content-Encoding: deflate прямо сейчас, это не сломает ничего рабочего. Потом обновляйте.
