
BlueGate Exploit validator — валидатор RD Gateway для CVE-2020-0609 и CVE-2020-0610 (BlueGate) с использованием OpenSSL DTLS через UDP/3391.
Небольшая Python-утилита только для проверки, предназначенная для удалённой валидации поведения патчей, связанных с уязвимостями Microsoft Remote Desktop Gateway:
Данные уязвимости, обычно ассоциируемые с исследованием BlueGate, затрагивают Microsoft Remote Desktop Gateway (RD Gateway) и потенциально могут позволить неаутентифицированному удалённому злоумышленнику выполнить произвольный код на незапатченном сервере.
Эта утилита не реализует удалённое выполнение кода, отказ в обслуживании, закрепление в системе или доставку полезной нагрузки.
Она выполняет единственный проверочный запрос на уровне протокола и оценивает ответ RD Gateway.
| Свойство | Детали |
|---|
| CVE | CVE-2020-0609, CVE-2020-0610 |
| Компонент | Microsoft Remote Desktop Gateway |
| Тип уязвимости | Удалённое выполнение кода |
| Требуется аутентификация | Нет |
| Взаимодействие с пользователем | Нет |
| Вектор атаки | Сеть |
| Критичность | Критическая |
| CVSS v3.1 | 9.8 |
| Вектор CVSS | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Основной протокол | Транспорт RD Gateway по UDP |
| Порт UDP по умолчанию | 3391/UDP |
| Публичное название | BlueGate |
Затронутые семейства Windows Server включают:
Windows Server 2012
Windows Server 2012 R2
Windows Server 2016
Windows Server 2019
Системы, на которые установлены обновления безопасности Microsoft за январь 2020 года или более поздние накопительные обновления, должны содержать соответствующие исправления.
Развёртывание RD Gateway может открывать несколько связанных служб.
Например:
Microsoft RD Gateway
|
+------------+------------+
| |
TCP/443 UDP/3391
| |
HTTPS / RDWeb RD Gateway UDP
RPC-over-HTTPS DTLS-транспорт
Портал RDWeb может быть виден через браузер по адресу:
https://gateway.example/RDWeb/
а функциональность RD Gateway также может быть доступна через TCP/443.
Однако поверхность атаки, проверяемая данным валидатором в стиле BlueGate, — это транспорт RD Gateway по UDP, обычно прослушивающий порт:
UDP/3391
Поэтому сканер использует DTLS поверх UDP/3391, а не HTTPS поверх TCP/443.
Изменение порта в скрипте на 443 означало бы проверку:
UDP/443
что не то же самое, что:
TCP/443
Перед запуском валидатора уязвимости порт UDP/3391 можно проверить с помощью Nmap:
nmap -Pn -sU -p3391 --reason <TARGET>
Пример:
PORT STATE SERVICE
3391/udp open savant
Метка службы savant — это просто сопоставление имени порта в Nmap и не обязательно идентифицирует реальную службу.
Службу DTLS RD Gateway можно более надёжно подтвердить с помощью OpenSSL.
openssl s_client \
-dtls1 \
-connect <TARGET>:3391 \
-state
openssl s_client \
-dtls1_2 \
-connect <TARGET>:3391 \
-state
Успешное рукопожатие подтверждает, что служба DTLS отвечает на UDP/3391.
Типичный успешный вывод включает:
SSL handshake has read ...
New, SSLv3, Cipher is ...
Protocol: DTLSv1
или:
Protocol: DTLSv1.2
Валидатор:
Для проверки не требуются учётные данные для аутентификации.
Утилита намеренно содержит:
НИКАКОЙ обратной оболочки
НИКАКОГО выполнения команд
НИКАКОЙ эксплойт-нагрузки
НИКАКОГО цикла отказа в обслуживании
НИКАКОЙ повторной передачи повреждённых пакетов
Протестировано с:
Python 3
Клиент командной строки OpenSSL
Linux
Проверьте OpenSSL:
openssl version
Проверьте Python:
python3 --version
Модуль OpenSSL для Python не требуется, поскольку скрипт запускает системную реализацию openssl s_client.
Это позволяет избежать проблем совместимости, с которыми сталкивались более старые реализации BlueGate, полагавшиеся на устаревшие API Python/OpenSSL, такие как:
DTLSv1_client_method
Базовое сканирование:
python3 BlueGate.py <TARGET>
Пример:
python3 BlueGate.py 192.0.2.10
Пункт назначения по умолчанию:
UDP/3391
python3 BlueGate.py \
-P 3391 \
192.0.2.10
python3 BlueGate.py \
--dtls 1 \
192.0.2.10
python3 BlueGate.py \
--dtls 1.2 \
192.0.2.10
Проверка обоих вариантов может быть полезной:
python3 BlueGate.py --dtls 1 192.0.2.10
python3 BlueGate.py --dtls 1.2 192.0.2.10
Пример результата для запатченного RD Gateway:
[*] Target: 192.0.2.10:3391/udp
[*] DTLS mode: 1.2
[*] Starting OpenSSL DTLS client...
[+] DTLS handshake completed.
[*] Probe (11 bytes): 0500070000004100010041
[*] Sending one validation packet...
[*] Response length: 16
[*] Response hex: 02000c0000000000ffffffffffff0080
[*] Status: 0x8000ffff
[+] PATCHED SIGNATURE RECEIVED
Server returned 0x8000ffff, which is
the rejection value used by the public
CVE detector to identify a patched host.
Тот же ответ запатченной системы может также возвращаться через DTLS 1.0:
Response length: 16
Response hex: 02000c0000000000ffffffffffff0080
Status: 0x8000ffff
0x8000ffffОтвет, заканчивающийся на:
0x8000ffff
— это значение отклонения, используемое публичными сканерами BlueGate/RD Gateway для идентификации условия некорректной фрагментации как отклонённого.
Поэтому инструмент сообщает:
PATCHED SIGNATURE RECEIVED
Это даёт веские доказательства на уровне протокола того, что конкретное условие, проверяемое для CVE-2020-0609/CVE-2020-0610, не эксплуатируемо с помощью известной публичной техники обнаружения.
Если получен 16-байтовый ответ RD Gateway, но итоговый DWORD отличается от:
0x8000ffff
инструмент сообщает:
DETECTOR POSITIVE
Это следует рассматривать как:
Потенциально уязвим
а не как немедленное доказательство успешного удалённого выполнения кода.
Результат желательно подтвердить с помощью:
Информации о сборке Windows
Информации об установленных обновлениях KB
Инвентаризации патчей Microsoft
Сканирования уязвимостей с учётными данными
перед тем как сообщать об уязвимости как о безусловно эксплуатируемой.
Если ответ приложения не получен:
INCONCLUSIVE
Инструмент намеренно не классифицирует таймаут как уязвимость.
Таймаут может быть вызван:
Поэтому:
Нет ответа != Уязвим
Публичный подход к обнаружению BlueGate/RDG использует пакет фрагментации RD Gateway, содержащий необычное количество фрагментов.
Концептуально:
DTLS-соединение
|
v
+-----------------------+
| Парсер UDP RD Gateway |
+-----------------------+
|
| проверочный пакет фрагментации
v
+-----------------------+
| Проверка фрагментов |
+-----------------------+
|
+---- запатчен ----> отклонение
| 0x8000ffff
|
+---- неожиданно ---> требует исследования
Проверочный пакет, используемый этой утилитой, отправляется только один раз.
Этот проект предназначен исключительно для:
Проверяйте только те системы, на которые у вас есть явное разрешение.
Автор не несёт ответственности за неправомерное использование, несанкционированный доступ, нарушение работы служб, потерю данных или иные последствия, возникшие в результате использования или модификации данного программного обеспечения.
Методология обнаружения основана на публично задокументированных исследованиях уязвимостей Microsoft RD Gateway CVE-2020-0609 и CVE-2020-0610, включая работу, выполненную сообществом исследователей безопасности BlueGate и RD Gateway.
Данный проект в первую очередь модернизирует процесс валидации, используя системную реализацию DTLS OpenSSL вместо устаревших внутренних механизмов DTLS pyOpenSSL.