
Write-up y prueba de concepto ADB para CVE-2026-20516, una vulnerabilidad de confused deputy en MediaTek Android TV MiracastService que permite cambios locales en el estado de Wi-Fi Direct.
Investigación y divulgación por Davide Di Matteo (@Dingo97).
Este es mi primer CVE acreditado. Encontré un servicio Miracast con privilegios de sistema, exportado incorrectamente, mientras investigaba un PEAQ Android TV. Un llamador puede proporcionar un extra de intent que hace que el servicio cambie el estado de Wi-Fi Direct usando sus propios privilegios.
MediaTek publicó el problema en su boletín de seguridad de septiembre de 2026 y acredita a Davide Di Matteo en sus reconocimientos de seguridad. Este análisis y la reproducción original con ADB se publican tras la divulgación coordinada y con el permiso del proveedor.
Leer en mi sitio web · Repositorio de GitHub
| Campo | Valor |
|---|---|
| CVE | CVE-2026-20516 |
| Componente | com.mediatek.androidbox.MiracastService |
| Gravedad del proveedor | Media |
| CVSS v3.1 publicado | 5.5 — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H (Tenable) |
| Debilidad oficial | CWE-926: Exportación incorrecta de componentes de aplicaciones Android |
| Mecanismo | Confused deputy / control de acceso ausente |
| Impacto descrito por el proveedor | Denegación de servicio local mediante una posible escalada de privilegios |
| Requisitos previos del ataque | Ejecución de código local con privilegios de usuario; no se requiere interacción del usuario |
| Identificadores del parche | ALPS11060069 / DTV04881615 |
| Incidencia de MediaTek | MSV-7882 |
| Publicación del proveedor | 7 de septiembre de 2026 |
| Publicación del análisis | 11 de septiembre de 2026 |
El impacto, los identificadores del parche y los requisitos previos del ataque local están documentados en el registro CVE. La puntuación numérica y el vector anteriores son los publicados por Tenable. Reemplazan la evaluación preliminar de 5.1 de mi informe original. CWE-284 (control de acceso incorrecto) y CWE-441 (confused deputy) describen el análisis original; MediaTek clasifica el problema como CWE-926.
| Campo | Valor |
|---|---|
| Dispositivo | PEAQ Smart TV, modelo AI PONT |
| OEM / plataforma | Changhong / MediaTek |
| Sistema operativo | Android TV 11 |
| Nivel de parche de seguridad de Android | Junio de 2025 |
| Compilación | RTMA.250416.192 |
| Kernel | 4.19.116++ (#1 Sat Aug 23 09:58:11 CST 2025) |
| Software | V03.06037 |
| Paquete | com.mediatek.androidbox |
| APK | WFDSinkTest_CH.apk |
| Versión de la aplicación | 1.0.0.16 |
| UID compartido declarado | android.uid.system |
Estos son los detalles del dispositivo utilizado para la investigación original, no una lista de todas las versiones de firmware vulnerables o corregidas.
El análisis del manifiesto registrado en el informe original muestra que MiracastService está exportado con android:exported="true", sin un permiso que proteja el acceso al servicio. La aplicación declara android:sharedUserId="android.uid.system".
El onStartCommand() del servicio lee el extra booleano screen_share del intent sin comprobar si el llamador está autorizado a controlar Miracast. El servicio entonces realiza operaciones en su propio contexto privilegiado. Este es el confused deputy: el llamador proporciona la solicitud, mientras que el servicio del sistema proporciona la autoridad.
En la implementación analizada, la ruta screen_share=false puede llamar a WifiP2pManager.createGroup(). La llamada es condicional: la compartición de pantalla debe estar deshabilitada en el estado del servicio, Wi-Fi P2P debe estar habilitado y no debe existir ya un grupo. El nombre del booleano no debe interpretarse como una afirmación directa sobre si se creará o eliminará un grupo.
El informe también registra una escritura a Settings.Global.putInt(..., "miracast_enable", 1) en onCreate(). Por lo tanto, desencadenar el ciclo de vida del servicio puede provocar una escritura en ajustes protegidos a través del servicio. Esta es una observación del análisis de la implementación; el extracto de registro a continuación no demuestra de forma independiente esa escritura.
Las comprobaciones de permisos relevantes dependen del framework de Android y de la compilación del OEM. El problema clave es la autorización ausente en el límite del servicio exportado, más que la afirmación de que todas las versiones de Android aplican un conjunto de permisos idéntico para Wi-Fi Direct.
MediaTek describe un riesgo de denegación de servicio local. En el televisor probado, la sesión de ADB registrada muestra que el servicio acepta screen_share=false y crea con éxito un grupo de Wi-Fi Direct. Los cambios inesperados en este estado pueden interferir con el uso legítimo de Miracast y pueden exponer un estado del receptor que el usuario no solicitó.
El componente exportado y la ausencia de control de acceso respaldan una ruta de ataque desde una aplicación local en el análisis original. El shell de ADB se ejecuta con la identidad shell de Android, no con un UID de aplicación ordinario. En consecuencia, estos comandos y registros demuestran el comportamiento del servicio desde ADB; por sí solos, no prueban la ejecución desde una aplicación sin permisos. Este repositorio no incluye una reproducción basada en una aplicación probada por separado.
El extracto no establece ejecución de código arbitrario, un shell root, una conexión completada desde un dispositivo cercano ni una eliminación exitosa del grupo. El llamador no adquiere el UID de sistema del servicio; induce al servicio a actuar en su nombre.
La siguiente es la reproducción manual del informe original. Cambia el estado de Miracast y fuerza la detención del paquete receptor. Registre el estado actual de transmisión antes de ejecutarla.
En la primera terminal:
adb logcat | grep -i -E 'screen_share|createGroup|removeGroup'
En la segunda terminal:
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
Esta es la secuencia de reinicio utilizada en la reproducción original. Una detención forzada del paquete no garantiza que el subsistema Wi-Fi de Android haya eliminado un grupo existente. Si un grupo persiste, reinicie el receptor mediante los controles del televisor y verifique su estado antes de volver a intentarlo.
adb shell am startservice -n com.mediatek.androidbox/.MiracastService --ez screen_share false
Busque Enter createGroup seguido de createGroup success. Si solo aparece Received screen_share tag, el intent se procesó, pero no se ha demostrado la creación del grupo: compruebe las condiciones previas descritas anteriormente.
adb shell am startservice -n com.mediatek.androidbox/.MiracastService --ez screen_share true