
Write-up e prova de conceito em ADB para CVE-2026-20516, uma falha de confused deputy no MiracastService de Android TV da MediaTek que permite alterações locais no estado do Wi-Fi Direct.
Pesquisa e divulgação por Davide Di Matteo (@Dingo97).
Este é o meu primeiro CVE creditado. Encontrei um serviço Miracast exportado incorretamente e com privilégios de sistema enquanto pesquisava uma PEAQ Android TV. Um chamador pode fornecer um extra de intent que faz o serviço alterar o estado do Wi-Fi Direct usando seus próprios privilégios.
A MediaTek publicou o problema em seu boletim de segurança de setembro de 2026 e credita Davide Di Matteo em seus agradecimentos de segurança. Este write-up e a reprodução original via ADB são publicados após divulgação coordenada e permissão do fornecedor.
Leia no meu site · Repositório no GitHub
| Campo | Valor |
|---|---|
| CVE | CVE-2026-20516 |
| Componente | com.mediatek.androidbox.MiracastService |
| Severidade do fornecedor | Média |
| 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) |
| Fraqueza oficial | CWE-926: Exportação inadequada de componentes de aplicativos Android |
| Mecanismo | Confused deputy / controle de acesso ausente |
| Impacto descrito pelo fornecedor | Negação de serviço local por meio de possível escalação de privilégio |
| Pré-requisitos de ataque | Execução de código local com privilégios de usuário; nenhuma interação do usuário necessária |
| Identificadores de patch | ALPS11060069 / DTV04881615 |
| Problema MediaTek | MSV-7882 |
| Publicação do fornecedor | 7 de setembro de 2026 |
| Publicação do write-up | 11 de setembro de 2026 |
O impacto, os identificadores de patch e os pré-requisitos de ataque local estão documentados no registro do CVE. A pontuação numérica e o vetor acima são os publicados pela Tenable. Eles substituem a avaliação preliminar de 5.1 do meu relatório original. CWE-284 (controle de acesso inadequado) e CWE-441 (confused deputy) descrevem a análise original; a MediaTek classifica o problema como CWE-926.
| Campo | Valor |
|---|---|
| Dispositivo | PEAQ Smart TV, modelo AI PONT |
| OEM / plataforma | Changhong / MediaTek |
| Sistema operacional | Android TV 11 |
| Nível de patch de segurança do Android | Junho de 2025 |
| Build | RTMA.250416.192 |
| Kernel | 4.19.116++ (#1 Sat Aug 23 09:58:11 CST 2025) |
| Software | V03.06037 |
| Pacote | com.mediatek.androidbox |
| APK | WFDSinkTest_CH.apk |
| Versão do aplicativo | 1.0.0.16 |
| UID compartilhado declarado | android.uid.system |
Estes são os detalhes do dispositivo usado na pesquisa original, não uma lista de todas as versões de firmware vulneráveis ou corrigidas.
A análise do manifesto registrada no relatório original mostra que MiracastService é exportado com android:exported="true", sem uma permissão protegendo o acesso ao serviço. O aplicativo declara android:sharedUserId="android.uid.system".
O onStartCommand() do serviço lê o extra booleano screen_share do intent sem verificar se o chamador está autorizado a controlar o Miracast. O serviço então executa operações em seu próprio contexto privilegiado. Este é o confused deputy: o chamador fornece a requisição, enquanto o serviço do sistema fornece a autoridade.
Na implementação analisada, o caminho screen_share=false pode chamar WifiP2pManager.createGroup(). A chamada é condicional: o compartilhamento de tela deve estar desabilitado no estado do serviço, o Wi-Fi P2P deve estar habilitado e nenhum grupo deve existir ainda. O nome do booleano não deve ser interpretado como uma afirmação direta sobre se um grupo será criado ou removido.
O relatório também registra uma escrita em Settings.Global.putInt(..., "miracast_enable", 1) em onCreate(). Acionar o ciclo de vida do serviço pode, portanto, causar uma escrita em configurações protegidas por meio do serviço. Esta é uma observação da análise da implementação; o trecho de log abaixo não demonstra de forma independente essa escrita.
As verificações de permissão relevantes dependem do framework Android e da build do OEM. O problema principal é a autorização ausente na fronteira do serviço exportado, e não uma afirmação de que toda versão do Android impõe um conjunto idêntico de permissões para Wi-Fi Direct.
A MediaTek descreve um risco de negação de serviço local. Na TV testada, a sessão ADB registrada mostra o serviço aceitando screen_share=false e criando com sucesso um grupo Wi-Fi Direct. Alterações inesperadas nesse estado podem interferir no uso legítimo do Miracast e podem expor um estado de receptor que o usuário não solicitou.
O componente exportado e o controle de acesso ausente sustentam um caminho de ataque por aplicativo local na análise original. O shell do ADB é executado com a identidade shell do Android, não como um UID de aplicativo comum. Consequentemente, esses comandos e logs demonstram o comportamento do serviço a partir do ADB; eles não provam, por si só, a execução a partir de um aplicativo sem permissões. Este repositório não inclui uma reprodução baseada em aplicativo testada separadamente.
O trecho não estabelece execução de código arbitrário, um shell root, uma conexão concluída a partir de um dispositivo próximo ou remoção bem-sucedida de grupo. O chamador não adquire o UID de sistema do serviço; ele induz o serviço a agir em seu nome.
A seguir está a reprodução manual do relatório original. Ela altera o estado do Miracast e força a parada do pacote receptor. Registre o estado atual de transmissão antes de executá-la.
No primeiro terminal:
adb logcat | grep -i -E 'screen_share|createGroup|removeGroup'
No segundo 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 é a sequência de reset usada na reprodução original. Um force-stop de pacote não garante que o subsistema Wi-Fi do Android tenha removido um grupo existente. Se um grupo persistir, reinicie o receptor pelos controles da TV e verifique seu estado antes de tentar novamente.
adb shell am startservice -n com.mediatek.androidbox/.MiracastService --ez screen_share false
Procure por Enter createGroup seguido de createGroup success. Se aparecer apenas Received screen_share tag, o intent foi processado, mas a criação do grupo não foi demonstrada: verifique as pré-condições descritas acima.
adb shell am startservice -n com.mediatek.androidbox/.MiracastService --ez screen_share true
Isso envia o valor de limpeza usado no relatório original. Verifique se a transmissão e o Wi-Fi Direct retornaram ao estado pretendido usando os controles da TV. O recebimento do intent por si só não é prova de que a limpeza foi bem-sucedida; restaure o receptor manualmente se necessário.
O trecho de logcat a seguir foi capturado na TV testada em 10 de março de 2026. É uma evidência da pesquisa original, não um novo teste realizado para esta publicação.