
Write-up и proof of concept на ADB для CVE-2026-20516 — уязвимости типа confused deputy в MediaTek Android TV MiracastService, позволяющей локально изменять состояние Wi-Fi Direct.
Исследование и раскрытие информации: Davide Di Matteo (@Dingo97).
Это мой первый CVE, зачтённый в мой счёт. Я обнаружил неправильно экспортированный системно-привилегированный сервис Miracast во время исследования PEAQ Android TV. Вызывающая сторона может передать extra-параметр intent, который заставляет сервис изменять состояние Wi-Fi Direct, используя собственные привилегии.
MediaTek опубликовала эту проблему в своём бюллетене безопасности за сентябрь 2026 года и указывает Davide Di Matteo в своих благодарностях по безопасности. Эта статья и оригинальное воспроизведение через ADB публикуются после скоординированного раскрытия и с разрешения вендора.
Читать на моём сайте · Репозиторий GitHub
| Поле | Значение |
|---|---|
| CVE | CVE-2026-20516 |
| Компонент | com.mediatek.androidbox.MiracastService |
| Уровень серьёзности по оценке вендора | Средний |
| Опубликованный CVSS v3.1 | 5.5 — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H (Tenable) |
| Официальная категория слабости | CWE-926: Improper Export of Android Application Components |
| Механизм | Confused deputy / отсутствие контроля доступа |
| Влияние по описанию вендора | Локальный отказ в обслуживании через возможное повышение привилегий |
| Предварительные условия атаки | Локальное выполнение кода с пользовательскими привилегиями; взаимодействие с пользователем не требуется |
| Идентификаторы патчей | ALPS11060069 / DTV04881615 |
| Проблема MediaTek | MSV-7882 |
| Публикация вендора | 7 сентября 2026 |
| Публикация статьи | 11 сентября 2026 |
Влияние, идентификаторы патчей и предварительные условия локальной атаки задокументированы в записи CVE. Числовая оценка и вектор выше — это те, что опубликованы Tenable. Они заменяют предварительную оценку 5.1 из моего первоначального отчёта. CWE-284 (improper access control) и CWE-441 (confused deputy) описывают первоначальный анализ; MediaTek классифицирует проблему как CWE-926.
| Поле | Значение |
|---|---|
| Устройство | PEAQ Smart TV, модель AI PONT |
| OEM / платформа | Changhong / MediaTek |
| Операционная система | Android TV 11 |
| Уровень патча безопасности Android | Июнь 2025 |
| Сборка | RTMA.250416.192 |
| Ядро | 4.19.116++ (#1 Sat Aug 23 09:58:11 CST 2025) |
| ПО | V03.06037 |
| Пакет | com.mediatek.androidbox |
| APK | WFDSinkTest_CH.apk |
| Версия приложения | 1.0.0.16 |
| Объявленный shared UID | android.uid.system |
Это сведения об устройстве, использованном для первоначального исследования, а не список всех уязвимых или исправленных версий прошивки.
Анализ манифеста, зафиксированный в первоначальном отчёте, показывает, что MiracastService экспортируется с android:exported="true", без разрешения, защищающего доступ к сервису. Приложение объявляет android:sharedUserId="android.uid.system".
Метод onStartCommand() сервиса читает булев extra-параметр intent screen_share, не проверяя, уполномочена ли вызывающая сторона управлять Miracast. Затем сервис выполняет операции в собственном привилегированном контексте. Это и есть confused deputy: вызывающая сторона предоставляет запрос, а системный сервис предоставляет полномочия.
В проанализированной реализации путь screen_share=false может вызвать WifiP2pManager.createGroup(). Вызов условный: демонстрация экрана должна быть отключена в состоянии сервиса, Wi-Fi P2P должен быть включён, и группа ещё не должна существовать. Имя булевой переменной не следует интерпретировать как прямое утверждение о том, будет ли создана или удалена группа.
В отчёте также зафиксирована запись в Settings.Global.putInt(..., "miracast_enable", 1) в onCreate(). Таким образом, запуск жизненного цикла сервиса может вызвать запись в защищённые настройки через сервис. Это наблюдение из анализа реализации; приведённый ниже фрагмент лога не демонстрирует эту запись независимо.
Соответствующие проверки разрешений зависят от фреймворка Android и сборки OEM. Ключевая проблема — отсутствие авторизации на границе экспортированного сервиса, а не утверждение о том, что каждая версия Android применяет идентичный набор разрешений для Wi-Fi Direct.
MediaTek описывает риск локального отказа в обслуживании. На протестированном телевизоре записанная сессия ADB показывает, что сервис принимает screen_share=false и успешно создаёт группу Wi-Fi Direct. Неожиданные изменения этого состояния могут помешать легитимному использованию Miracast и могут привести к раскрытию состояния приёмника, которое пользователь не запрашивал.
Экспортированный компонент и отсутствие контроля доступа подтверждают путь атаки через локальное приложение в первоначальном анализе. ADB shell работает под идентификатором Android shell, а не под обычным UID приложения. Следовательно, эти команды и логи демонстрируют поведение сервиса из ADB; сами по себе они не доказывают выполнение из приложения с нулевыми разрешениями. Этот репозиторий не содержит отдельно протестированного воспроизведения на основе приложения.
Фрагмент не устанавливает произвольное выполнение кода, root-оболочку, завершённое подключение от nearby-устройства или успешное удаление группы. Вызывающая сторона не получает системный UID сервиса; она побуждает сервис действовать от её имени.
Ниже приведено ручное воспроизведение из первоначального отчёта. Оно изменяет состояние Miracast и принудительно останавливает пакет приёмника. Запишите текущее состояние трансляции перед запуском.
В первом терминале:
adb logcat | grep -i -E 'screen_share|createGroup|removeGroup'
Во втором терминале:
adb shell am startservice -n com.mediatek.androidbox/.MiracastService --ez screen_share true
sleep 3
adb shell am force-stop com.mediatek.androidbox
sleep 2
Это последовательность сброса, использованная в первоначальном воспроизведении. Принудительная остановка пакета не гарантирует, что подсистема Wi-Fi Android удалила существующую группу. Если группа сохраняется, сбросьте приёмник через элементы управления телевизора и проверьте его состояние перед повторной попыткой.
adb shell am startservice -n com.mediatek.androidbox/.MiracastService --ez screen_share false
Ищите Enter createGroup, за которым следует createGroup success. Если появляется только Received screen_share tag, intent был обработан, но создание группы не продемонстрировано: проверьте предварительные условия, описанные выше.
adb shell am startservice -n com.mediatek.androidbox/.MiracastService --ez screen_share true
Это отправляет значение очистки, использованное в первоначальном отчёте. Убедитесь, что трансляция и Wi-Fi Direct вернулись в предполагаемое состояние, используя элементы управления телевизора. Получение intent само по себе не является доказательством успешной очистки; при необходимости восстановите приёмник вручную.