Уязвимость BDU:2024-11128 LDAP Nightmare
Уязвимость BDU:2024-11128 LDAP Nightmare
Категория: Программы Теги: Уязвимости Опубликовано: 9 апреля 2025

Уязвимость BDU:2024-11128 LDAP Nightmare

Уязвимость BDU:2024-11128 (CVE-2024-49113), также известная как LDAP Nightmare, затрагивает реализацию протокола LDAP в Windows. Она связана с чтением за пределами буфера (Out-of-Bounds Read) при обработке LDAP-ответов с рефералами (перенаправлениями). Это позволяет удалённому злоумышленнику вызвать отказ в обслуживании (DoS), приводящий к перезагрузке системы или крашу процесса lsass.exe (Local Security Authority Subsystem Service).

Уязвимые системы:

  • Windows Server 2008–2025

  • Windows 10/11 (все версии)

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H/E:U/RL:O/RC:C


Технический анализ уязвимости

Корень проблемы

Функция обработки LDAP-рефералов в Windows некорректно проверяет длину поля messageID в ответах сервера. При получении специально сформированного пакета с подменённым messageID возникает чтение данных за пределами выделенного буфера, что вызывает критическую ошибку.

Уязвимый код (упрощённо):

void ProcessLDAPReferral(LDAPMessage* response) {  
    int messageID = ExtractMessageID(response); // Некорректная проверка длины  
    ...  
}  

Механика атаки

  1. Инициация LDAP-запроса:
    Атакующий отправляет через RPC вызов DsrGetDcNameEx2 запрос к контроллеру домена, запрашивая информацию о домене.

  2. Подмена ответа:
    Злоумышленник разворачивает поддельный LDAP-сервер, который возвращает ответ с рефералом, содержащим недопустимый messageID.

  3. Сбой обработки:
    Клиентский код Windows неправильно интерпретирует messageID, читая память за пределами буфера, что приводит к крашу lsass.exe или BSOD.


Разбор эксплойта LDAP Nightmare

Эксплойт использует фреймворк Metasploit и состоит из двух компонентов:

1. LDAP-сервер (UDP)

  • Цель: Прослушивает порт 389 и отправляет вредоносные ответы.

  • Формирование пакета:

    def get_malicious_ldap_packet(message_id):  
        # Создание пакета с рефералом и подменённым messageID  
        referral = pureldap.LDAPSearchResultDone(resultCode=10, referral=['ldap://attacker.com'])  
        packet = referral.toWire()  
        packet = manipulate_message_id(packet, message_id)  # Внедрение недопустимого ID  
        return packet  

2. RPC-триггер

  • Вызов DsrGetDcNameEx2:

    dce.bind(nrpc.MSRPC_UUID_NRPC)  
    request = nrpc.DsrGetDcNameEx2(DomainName=attacker_domain, ...)  
    dce.request(request)  # Инициирует LDAP-запрос к поддельному серверу  

Условия

  • Контроль над DNS: Домен атакующего должен иметь SRV-записи:

    _ldap._tcp.dc._msdcs.attacker.com → attacker_ip  
  • Доступ к RPC-порту (49664) целевого сервера.


Способы защиты

1. Установка обновлений

Установите патчи Microsoft от 10.12.2024. Проверьте версию wldap32.dll:

Get-Item "C:\Windows\System32\wldap32.dll" | Select-Object VersionInfo  

Ожидаемая версия после патча: 10.0.19041.3803 (Win10 21H2).

2. Ограничение доступа к LDAP/RPC

  • Фаерволы: Блокируйте входящие подключения к портам 389 (LDAP) и 49664 (RPC) из ненадёжных сетей.

  • Групповые политики: Отключите анонимные LDAP-запросы через gpedit.msc:

    Computer Configuration → Policies → Windows Settings → Security Settings → Local Policies → Security Options → "Network access: Restrict anonymous access to Named Pipes and Shares" → Enabled  

3. Мониторинг активности

  • Анализ LDAP-трафика: Используйте Wireshark для детекции пакетов с рефералами на нестандартные домены.

  • Сигнатуры SIEM: Настройте правила для обнаружения частых вызовов DsrGetDcNameEx2.
    Пример правила для Splunk:

    source="win:security" EventCode=4663 ObjectType="RPC Server" AccessMask="0x1"  

4. Резервирование служб

  • Кластеризация контроллеров домена: Обеспечьте отказоустойчивость AD через резервные DC.

  • Регулярные бэкапы: Используйте wbadmin для создания теневых копий системных разделов.


Рекомендации для администраторов

  • Проверка DNS-записей: Убедитесь, что SRV-записи домена защищены от подмены (DNSSEC).

  • Сегментация сети: Изолируйте контроллеры домена в отдельном VLAN.

Алексей Черемных Алексей Черемных
67