ADG Оставить заявку
Блог Информационная безопасность 4 мин чтения

PrintNightmare: PoC на GitHub, активная эксплуатация и экстренный патч KB5004945

PoC-эксплойт PrintNightmare появился на GitHub и исчез через час - но fork-ов уже десятки. Накатываем KB5004945 на серверы клиентов и чистим Point and Print.

Контекст момента

PrintNightmare: публичный PoC-эксплойт опубликован на GitHub, Microsoft выпускает внеплановый патч KB5004945 для CVE-2021-34527

Когда две недели назад мы останавливали Print Spooler на контроллерах домена, Microsoft обещал выпустить патч. Патч вышел - но не тогда, когда его ждали, и не совсем так, как хотелось.

Ночью 29 июня на GitHub появился рабочий PoC-эксплойт для PrintNightmare. Через несколько часов репозиторий удалили, но fork-и уже разошлись по всему интернету. В ту же ночь начали фиксироваться активные попытки эксплуатации в дикой природе. Microsoft экстренно выкатил внеплановый патч KB5004945.

Мы узнали об этом в начале рабочего дня. Дальше - стандартный режим аварийного реагирования.

Почему PoC - это принципиальный перелом

До публикации PoC CVE-2021-34527 была серьёзной уязвимостью в нишевом смысле: технически подкованный атакующий мог её воспроизвести, но массовой эксплуатации не было. После публикации рабочего кода порог входа упал до нуля. Скрипт-кидди с минимальными навыками теперь может получить SYSTEM на контроллере домена, у которого запущен Print Spooler и нет патча.

Час между появлением PoC и первыми зафиксированными атаками - это не метафора. По данным из профессиональных каналов, которые мы читаем, первые попытки сканирования и эксплуатации появились быстро. Удаление репозитория в такой ситуации - жест больше символический, чем практический.

KB5004945: что это и зачем его накатывать немедленно

Патч KB5004945 вышел вне стандартного цикла Patch Tuesday - Microsoft выпустил его экстренно. Он закрывает CVE-2021-34527 (RCE через Print Spooler) на актуальных версиях Windows: Server 2019, 2016, 2012 R2, Windows 10 разных версий.

Важный момент, который сразу выяснился: патч закрывает уязвимость, но с одной оговоркой. Если в системе включена политика Point and Print без ограничений (NoWarningNoElevationOnInstall = 1), патч не даёт полной защиты. Нужно либо отключить эту политику, либо убедиться, что она настроена правильно.

Это стало второй частью нашей работы в этот день.

Что мы делали

Процесс выглядел так:

  • Приоритизация по критичности. Первыми в очереди - контроллеры домена и серверы управления. Там либо уже был остановлен Spooler после нашего прохода двумя неделями ранее, либо нужно было и останавливать, и патчить одновременно.
  • Накат KB5004945. На серверах с активным Spooler - патч через WSUS или вручную с Microsoft Update Catalog, в зависимости от того, как у клиента устроен патч-менеджмент. Перезагрузка обязательна.
  • Проверка Point and Print. Полезли в GPO и реестр проверять, не включил ли кто NoWarningNoElevationOnInstall. Это настройка, которую иногда включают для удобства пользователей - чтобы принтеры ставились без запроса прав. Удобно, но в контексте PrintNightmare - опасно.
  • Верификация. После патча и проверки политик - убеждались, что Spooler на DC всё ещё выключен или что патч применился корректно.

На нескольких клиентах Point and Print без ограничений всё-таки обнаружился. Не на DC, но на файловых серверах с ролью print server. Вот именно здесь без проверки можно было решить, что раз патч накатили - всё хорошо, и ошибиться.

Point and Print: почему это важно

Point and Print - механизм, который позволяет Windows автоматически скачивать и устанавливать драйверы принтеров с сервера. Удобная вещь в нормальных условиях: пользователь добавляет принтер, драйвер приезжает с сервера сам.

Проблема в том, что при отключённых предупреждениях (NoWarningNoElevationOnInstall = 1) Windows устанавливает эти драйверы без запроса повышения привилегий. В контексте PrintNightmare это означает, что если атакующий контролирует сервер, с которого едут «драйверы», или может имитировать такой сервер, - он получает выполнение кода с системными привилегиями на клиентской машине.

Microsoft явно указал в рекомендациях по KB5004945: патч + включённый Point and Print без ограничений = неполная защита. Оба условия нужно закрывать.

Что в итоге

К концу дня у всех клиентов, до которых мы добрались, ситуация выглядела так: KB5004945 накатан, Point and Print либо вычищен из режима «без ограничений», либо подтверждено, что его не было. На контроллерах домена Spooler выключен - как и было сделано две недели назад.

Несколько клиентов всё ещё в очереди - там нет оперативного доступа или есть процедуры согласования окна обслуживания. Это нормальная ситуация для корпоративной среды, просто раздражающая, когда патч нужен сегодня, а не через две недели.

История с PrintNightmare иллюстрирует знакомый паттерн: уязвимость в компоненте с широким дефолтным присутствием, потом рабочий PoC, потом окно активной эксплуатации до патча. ProxyLogon в феврале шёл по той же схеме. Разница в том, что там между публикацией деталей и массовой эксплуатацией было немного больше времени. Здесь - буквально часы.

Помогает одно: регулярный аудит конфигураций и отслеживание состояния патчей в рамках постоянного сопровождения. Клиенты, у которых мы прошлись по Spooler две недели назад, сегодня были в значительно более спокойной позиции - один пункт из плана действий уже был закрыт.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.