
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.
Это сведения об устройстве, использованном для первоначального исследования, а не список всех уязвимых или исправленных версий прошивки.
Анализ манифеста, зафиксированный в первоначальном отчёте, показывает, что 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 само по себе не является доказательством успешной очистки; при необходимости восстановите приёмник вручную.
Следующий фрагмент logcat был записан на протестированном телевизоре 10 марта 2026 года. Это доказательство из первоначального исследования, а не новый тест, выполненный для этой публикации.
03-10 19:40:27.458 30288 30288 I MiracastService: Received screen_share tag: false
03-10 19:40:27.460 30288 30288 D MiracastService: Enter createGroup
03-10 19:40:27.530 30288 30288 D MiracastService: createGroup success
03-10 19:41:19.148 30288 30288 I MiracastService: Received screen_share tag: true
Первые три строки показывают получение параметра, вход в путь создания группы и успешный callback. Последняя строка показывает получение true; она не содержит callback об успешном удалении. PID 30288 виден, но UID процесса и идентификатор вызывающей стороны в этом фрагменте не зафиксированы.
Моё воспроизведение ограничено конфигурацией PEAQ AI PONT, указанной выше. Бюллетень MediaTek перечисляет затронутые чипсеты помимо этого устройства; обратитесь к записи вендора о CVE-2026-20516 для авторитетной области. Включение чипсета не определяет, получил ли конкретный розничный телевизор исправление прошивки от OEM.
Именование пакета и APK предполагало общий компонент MediaTek/Changhong во время первоначального исследования. Это наблюдение само по себе не устанавливает наличие этого экспортированного сервиса на каждом телевизоре на базе MediaTek.
Владельцам устройств следует получить прошивку, содержащую соответствующее исправление, от производителя телевизора. MediaTek идентифицирует исправления как ALPS11060069 / DTV04881615; ни одна исправленная версия прошивки PEAQ не была проверена в рамках этой статьи.
Сопровождающим компонента следует устранить внешнее воздействие с помощью android:exported="false", если внешние вызывающие стороны не нужны. Если требуется доверенный межприложенческий доступ, защитите сервис соответствующим разрешением уровня подписи и обеспечьте авторизацию перед изменением состояния приёмника. Проверьте все точки входа и побочные эффекты жизненного цикла, включая записи в защищённые настройки.
Это рекомендации по усилению защиты из анализа, а не описание неопубликованного патча вендора. Проверьте результат, используя как обычный UID приложения, так и легитимные клиенты трансляции.
| Дата | Событие |
|---|---|
| 10 марта 2026 | Первоначальное воспроизведение на устройстве и запись logcat. |
| 7 сентября 2026 | MediaTek опубликовала свой сентябрьский бюллетень, содержащий CVE-2026-20516. |
| 11 сентября 2026 | Публичная статья и PoC после периода раскрытия и одобрения вендора. |
Обнаружено и о сообщено Davide Di Matteo. Спасибо MediaTek за координацию раскрытия и признание исследования в своих благодарностях за сентябрь 2026 года.
| Поле | Значение |
|---|
| Устройство | 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 |