CVE-2022-21907: червеобразная уязвимость HTTP.sys и экстренный патчинг Windows Server 2019
CVE-2022-21907 в HTTP.sys - первый wormable-вектор 2022 года, CVSS 9.8. Без аутентификации, без клика. Как патчили клиентов на Windows Server 2019 и что нашли попутно.
CVE-2022-21907: удалённое выполнение кода без аутентификации в HTTP.sys (Windows Server 2019/2022), CVSS 9.8, помечена как wormable
Когда Patch Tuesday в январе выкатил CVE-2022-21907 с пометкой wormable и CVSS 9.8, мы уже разбирали январский пакет патчей и знали, что HTTP.sys на Windows Server 2019 - это приоритет первый. Прошла неделя. Вот что произошло за это время.
Почему wormable - это не просто страшное слово
Пометка wormable от Microsoft означает конкретное: уязвимость позволяет распространяться автоматически, без действий пользователя, от машины к машине. В случае CVE-2022-21907 вектор выглядит так: специально сформированный HTTP-запрос в обработчик Trailer Support в HTTP.sys - и получаете удалённое выполнение кода с привилегиями SYSTEM. Аутентификации не нужно. Жертва ничего не нажимает.
HTTP.sys - это не прикладной веб-сервер, это компонент ядра Windows, который слушает HTTP-трафик на уровне ниже IIS и обрабатывает его до того, как он попадает в приложение. Поэтому любой WAF или прикладная фильтрация здесь не помогает - трафик сначала проходит через HTTP.sys.
Ключевой момент по версиям: HTTP Trailer Support по умолчанию включён на Windows Server 2019 и 2022, но выключен на Server 2016 и старше. То есть старые серверы уязвимы только если кто-то явно включил эту функцию. На свежих - наоборот: надо явно выключать или патчить.
Как мы действовали
Первым делом - инвентаризация. Нужно было понять, где у клиентов вообще стоит Windows Server 2019 или 2022 и что на этих серверах слушает порт 80/443 через HTTP.sys. IIS очевидный кандидат, но не единственный: HTTP API использует ещё масса приложений - WinRM, некоторые агенты мониторинга, ряд продуктов Microsoft вроде Exchange и SCCM.
Для быстрой проверки, включён ли Trailer Support на конкретном хосте, смотрели реестр:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
EnableTrailerSupport
Если ключа нет - значение по умолчанию, а оно на 2019 равно 1 (включено). Это надо держать в голове: отсутствие ключа не означает «выключено».
Где патч нельзя было накатить немедленно - применяли workaround: выставляли EnableTrailerSupport = 0 и перезапускали HTTP-сервис. Это не требует перезагрузки сервера, что в случае продакшен IIS важно.
Что нашли попутно
Инвентаризация HTTP API - та вещь, которую обычно не делают в спокойное время. Делают только когда приходит wormable CVE и надо срочно понять поверхность атаки.
Несколько интересных находок по клиентам:
-
HTTP.sys открыт наружу там, где не должен быть. Несколько серверов с WinRM оказались доступны с периметра. WinRM использует HTTP.sys и по умолчанию слушает на 5985/5986. Порты не 80 и не 443, но именно поэтому их часто забывают в правилах файрвола.
-
IIS с устаревшими приложениями. Пара серверов с IIS обнаружила приложения, которые «уже не используются» - примерно та же история, что с Log4Shell в декабре. Сервер стоит, IIS крутится, HTTP.sys слушает. Никто не думал об этом как об активной поверхности атаки.
-
HTTP API используют агенты. Несколько агентов мониторинга и бэкапа регистрируют URL-пространства в HTTP.sys для своих веб-консолей. Часть из них была доступна не только изнутри.
Всё это не прямо про CVE-2022-21907 - это про то, что экстренный патчинг всегда вскрывает попутный технический долг.
Расстановка приоритетов
В managed-инфраструктуре мы работали по очевидной схеме: сначала серверы, доступные из интернета, потом DMZ, потом внутренние сегменты. Серверы на Windows Server 2016 и старше проверяли значение EnableTrailerSupport - у большинства его не было, то есть уязвимость не активна.
Патч KB5009546 (для Server 2019) шёл через WSUS без особых сюрпризов. Перезагрузка требуется, но это не тот случай, когда можно откладывать - wormable без аутентификации это то, что ждать не будет.
К концу недели все периметровые серверы 2019/2022 у клиентов закрыты. Внутренние доделываем в ближайшие дни.
Первый wormable 2022 года
Интересно, что год начался с двух подряд высококритичных векторов без аутентификации в продуктах Microsoft - и оба по масштабу потенциального ущерба сравнимы с тем, что мы наблюдали в Log4Shell. Только там Java, здесь ядро Windows.
Пока публичного эксплоита под CVE-2022-21907 нет - это даёт время, но не повод расслабляться. Wormable-уязвимости в компоненте ядра привлекают внимание быстро. Окно между выходом патча и появлением рабочего эксплоита имеет тенденцию сжиматься.
Параллельно продолжаем доделывать Log4Shell-аудит - ждём ответов от пары вендоров. Январь не соскучишься.