Уязвимости в Realtek SDK привели к проблемам в устройствах 65 производителей

В компонентах Realtek SDK, который используется различными производителями беспроводных устройств в своих прошивках, выявлены четыре уязвимости, позволяющие неаутентифицированному атакующему удалённо выполнить код на устройстве с повышенными привилегиями. По предварительной оценке, проблемы затрагивают как минимум 200 моделей устройств от 65 различных поставщиков, включая различные модели беспроводных маршрутизаторов Asus, A-Link, Beeline, Belkin, Buffalo, D-Link, Edison, Huawei, LG, Logitec, MT-Link, Netgear, Realtek, Smartlink, UPVEL, ZTE и Zyxel.

Проблема охватывает различные классы беспроводных устройств на базе SoC RTL8xxx, от беспроводных маршрутизаторов и усилителей Wi-Fi, до IP-камер и умных устройств для управления освещением. В устройствах на базе чипов RTL8xxx используется архитектура, подразумевающая установку двух SoC – на первом устанавливается прошивка производителя на базе Linux, а на втором выполняется отдельное урезанное Linux-окружение с реализацией функций точки доступа. Начинка второго окружения базируется на типовых компонентах, предоставляемых компанией Realtek в SDK. Указанные компоненты в том числе обрабатывают данные, поступающие в результате отправки внешних запросов.

Уязвимости затрагивают продукты, в которых используются Realtek SDK v2.x, Realtek “Jungle” SDK v3.0-3.4 и Realtek “Luna” SDK до версии 1.3.2. Исправление уже выпущено в обновлении Realtek “Luna” SDK 1.3.2a, а также готовятся к публикации патчи для Realtek “Jungle” SDK. Для Realtek SDK 2.x исправления выпускать не планируется, так как сопровождение данной ветки уже прекращено. Для всех уязвимостей предоставлены рабочие прототипы эксплоитов, позволяющие добиться выполнения своего кода на устройстве.

Выявленные уязвимости (первым двум присвоен уровень опасности 8.1, а остальным – 9.8):

  • CVE-2021-35392 – переполнение буфера в процессах mini_upnpd и wscd, реализующих функциональность “WiFi Simple Config” (mini_upnpd занимается обработкой пакетов SSDP, а wscd кроме поддержки SSDP занимается обслуживанием запросов UPnP на базе протокола HTTP). Атакующий может добиться выполнения своего кода через отправку специально оформленных UPnP-запросов “SUBSCRIBE” со слишком большим значением номера порта в поле “Callback”. SUBSCRIBE /upnp/event/WFAWLANConfig1 HTTP/1.1 Host: 192.168.100.254:52881 Callback: NT: upnp:event
  • CVE-2021-35393 – уязвимость в обработчиках “WiFi Simple Config”, проявляющаяся при использовании протокола SSDP (использует UDP и формат запросов, похожий на HTTP). Проблема вызвана использованием фиксированного буфера, размером 512 байт, при обработке параметра “ST:upnp” в сообщениях M-SEARCH, отправляемых клиентами для определения наличия сервисов в сети.
  • CVE-2021-35394 – уязвимость в процессе MP Daemon, отвечающем за выполнение операций диагностики (ping, traceroute). Проблема позволяет осуществить подстановку своих команд из-за недостаточной проверки аргументов при выполнении внешних утилит.
  • CVE-2021-35395 – серия уязвимостей в web-интерфейсах на базе http-серверов /bin/webs и /bin/boa. В обоих серверах выявлены типовые уязвимости, вызванные отсутствием проверки аргументов перед запуском внешних утилит функцией system(). Отличия сводятся только к использованию для атаки разных API. Оба обработчика не включали защиту от атаки CSRF и техники “DNS rebinding”, позволяющей организовать отправку запросов из внешней сети при ограничении доступа к интерфейсу только для внутренней сети. В процессах также по умолчанию использовалась предопределённая учётная запись supervisor/supervisor.
    Кроме того, в обработчиках выявлено несколько переполнений стека, проявляющихся при отправке аргументов слишком большого размера. POST /goform/formWsc HTTP/1.1 Host: 192.168.100.254 Content-Length: 129 Content-Type: application/x-www-form-urlencoded submit-url=%2Fwlwps.asp&resetUnCfg=0&peerPin=12345678;ifconfig>/tmp/1;&setPIN=Start+PIN&configVxd=off&resetRptUnCfg=0&peerRptPin=
  • Дополнительно отмечается выявление ещё нескольких уязвимостей в процессе UDPServer. Как оказалось одна из проблем уже была обнаружена другими исследователями ещё в 2015 году, но не была полностью исправлена. Проблема вызвана отсутствием должной проверки аргументов, передаваемых в функцию system() и может быть эксплуатирована отправкой на сетевой порт 9034 строки вида ‘orf;ls’. Кроме того, в UDPServer выявлено переполнение буфера из-за небезопасного использования функции sprintf, которое также потенциально может применяться для совершения атак.
Release. Ссылка here.