CVE-2021-34527 · CVSS 8.8 HIGH · опубликована 02.07.2021
2 июля 2021 года была раскрыта уязвимость CVE-2021-34527 с оценкой CVSS 8.8 HIGH в службе печати Windows (Print Spooler) — уязвимость, получившая имя PrintNightmare. Её масштаб особенно впечатляет: служба печати включена по умолчанию практически во всех версиях Windows, в том числе на контроллерах домена, а дизайн механизма установки драйверов принтера построен на доверии к клиентам. На момент раскрытия активные эксплойты уже существовали — уязвимость пришлось закрывать «на бегу».
Как это работает
Чтобы понять PrintNightmare, нужно понять архитектуру печати в Windows. Когда клиент отправляет задание на сетевой принтер, сервер печати (Print Spooler) может автоматически загрузить и установить нужный драйвер принтера. Драйверы принтеров — это код, исполняемый с системными привилегиями. Из исторических соображений удобства этот механизм был спроектирован как «plug-and-play»: клиент указывает серверу, где лежит драйвер, и сервер его устанавливает.
Проблема в том, что проверка полномочий на установку драйверов была недостаточной: непривилегированный пользователь мог заставить службу печати выполнить привилегированные файловые операции — скопировать и загрузить код из указанного ему места. Драйвер-«принтер» в действительности оказывался вредоносной библиотекой, которая исполнялась с правами SYSTEM на целевой машине. Атакующему даже не нужен физический принтер: достаточно сетевого доступа к службе. На контроллерах домена, где спулер печати исторически включён, эксплуатация давала полный контроль над доменом.
Реальные последствия
Эксплойты появились практически одновременно с раскрытием, и уязвимость была немедленно использована в реальных атаках, включая кампании вымогателей и группировок, эксплуатирующих AD-инфраструктуру. Особую остроту инциденту придало то, что временные митигации частично обходились, и Microsoft выпускала последовательные исправления, закрывающие обходные векторы. Для многих организаций PrintNightmare стал ударом по привычке держать спулер включённым «на всякий случай» — аудит показал, что служба печати присутствует там, где печать не использовалась годами, включая критические серверы.
Что делать
Первичная мера — установка обновлений безопасности июля 2021 года и последующих. Если патчить нельзя: отключение службы Print Spooler на системах, где печать не требуется (особенно на контроллерах домена и серверах), и/или ограничение установки драйверов печати администраторами через групповую политику. Детектирование: мониторинг событий загрузки драйверов принтеров и процессов spoolsv.exe с аномальными дочерними процессами. Долгосрочный урок: службы, корнями уходящие в эпоху доверенных локальных сетей, должны либо проходить серьёзный редизайн безопасности, либо быть по умолчанию выключены.