
Write-up e proof of concept ADB per CVE-2026-20516, una vulnerabilità di tipo confused deputy in MediaTek Android TV MiracastService che consente modifiche locali allo stato di Wi-Fi Direct.
Ricerca e divulgazione a cura di Davide Di Matteo (@Dingo97).
Questo è il mio primo CVE accreditato. Ho trovato un servizio Miracast esportato in modo improprio e con privilegi di sistema mentre analizzavo una PEAQ Android TV. Un chiamante può fornire un intent extra che induce il servizio a modificare lo stato del Wi-Fi Direct utilizzando i propri privilegi.
MediaTek ha pubblicato il problema nel suo bollettino di sicurezza di settembre 2026 e accredita Davide Di Matteo nei suoi ringraziamenti di sicurezza. Questo write-up e la riproduzione ADB originale sono pubblicati in seguito alla divulgazione coordinata e con il permesso del fornitore.
Leggi sul mio sito · Repository GitHub
| Campo | Valore |
|---|---|
| CVE | CVE-2026-20516 |
| Componente | com.mediatek.androidbox.MiracastService |
| Gravità secondo il fornitore | Media |
| CVSS v3.1 pubblicato | 5.5 — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H (Tenable) |
| Debolezza ufficiale | CWE-926: Improper Export of Android Application Components |
| Meccanismo | Confused deputy / controllo di accesso mancante |
| Impatto descritto dal fornitore | Denial of service locale tramite una possibile escalation di privilegi |
| Prerequisiti di attacco | Esecuzione di codice locale con privilegi utente; nessuna interazione utente richiesta |
| Identificatori della patch | ALPS11060069 / DTV04881615 |
| Problema MediaTek | MSV-7882 |
| Pubblicazione del fornitore | 7 settembre 2026 |
| Pubblicazione del write-up | 11 settembre 2026 |
L'impatto, gli identificatori della patch e i prerequisiti di attacco locale sono documentati nel record CVE. Il punteggio numerico e il vettore sopra riportati sono quelli pubblicati da Tenable. Sostituiscono la valutazione preliminare di 5.1 presente nel mio report originale. CWE-284 (improper access control) e CWE-441 (confused deputy) descrivono l'analisi originale; MediaTek classifica il problema come CWE-926.
| Campo | Valore |
|---|---|
| Dispositivo | PEAQ Smart TV, modello AI PONT |
| OEM / piattaforma | Changhong / MediaTek |
| Sistema operativo | Android TV 11 |
| Livello di patch di sicurezza Android | Giugno 2025 |
| Build | RTMA.250416.192 |
| Kernel | 4.19.116++ (#1 Sat Aug 23 09:58:11 CST 2025) |
| Software | V03.06037 |
| Pacchetto | com.mediatek.androidbox |
| APK | WFDSinkTest_CH.apk |
| Versione dell'applicazione | 1.0.0.16 |
| Shared UID dichiarato | android.uid.system |
Questi sono i dettagli del dispositivo utilizzato per la ricerca originale, non un elenco di tutte le versioni firmware vulnerabili o corrette.
L'analisi del manifest registrata nel report originale mostra che MiracastService è esportato con android:exported="true", senza un permesso che protegga l'accesso al servizio. L'applicazione dichiara android:sharedUserId="android.uid.system".
Il metodo onStartCommand() del servizio legge l'intent extra booleano screen_share senza verificare se il chiamante è autorizzato a controllare Miracast. Il servizio esegue quindi operazioni nel proprio contesto privilegiato. Questo è il confused deputy: il chiamante fornisce la richiesta, mentre il servizio di sistema fornisce l'autorità.
Nell'implementazione analizzata, il percorso screen_share=false può chiamare WifiP2pManager.createGroup(). La chiamata è condizionale: la condivisione dello schermo deve essere disabilitata nello stato del servizio, il Wi-Fi P2P deve essere abilitato e non deve esistere già un gruppo. Il nome del booleano non deve essere interpretato come un'affermazione diretta sul fatto che un gruppo verrà creato o rimosso.
Il report registra anche una scrittura su Settings.Global.putInt(..., "miracast_enable", 1) in onCreate(). L'attivazione del ciclo di vita del servizio può quindi causare una scrittura su impostazioni protette tramite il servizio. Questa è un'osservazione derivante dall'analisi dell'implementazione; l'estratto di log riportato di seguito non dimostra autonomamente tale scrittura.
I controlli dei permessi rilevanti dipendono dal framework Android e dalla build OEM. Il problema chiave è l'autorizzazione mancante al confine del servizio esportato, piuttosto che l'affermazione che ogni versione di Android applichi un insieme di permessi identico per il Wi-Fi Direct.
MediaTek descrive un rischio di denial-of-service locale. Sulla TV testata, la sessione ADB registrata mostra il servizio che accetta screen_share=false e crea con successo un gruppo Wi-Fi Direct. Modifiche impreviste a questo stato possono interferire con l'uso legittimo di Miracast e possono esporre uno stato del ricevitore che l'utente non ha richiesto.
Il componente esportato e il controllo di accesso mancante supportano un percorso di attacco da app locale nell'analisi originale. La shell ADB viene eseguita con l'identità shell di Android, non con un UID di applicazione ordinario. Di conseguenza, questi comandi e log dimostrano il comportamento del servizio da ADB; non provano, di per sé, l'esecuzione da un'applicazione senza permessi. Questo repository non include una riproduzione basata su applicazione testata separatamente.
L'estratto non stabilisce esecuzione di codice arbitrario, una shell root, una connessione completata da un dispositivo vicino o una rimozione riuscita del gruppo. Il chiamante non acquisisce l'UID di sistema del servizio; induce il servizio ad agire per suo conto.
Quella che segue è la riproduzione manuale dal report originale. Modifica lo stato di Miracast e forza l'arresto del pacchetto del ricevitore. Registra lo stato di casting corrente prima di eseguirla.
Nel primo terminale:
adb logcat | grep -i -E 'screen_share|createGroup|removeGroup'
Nel secondo terminale:
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
Questa è la sequenza di reset utilizzata nella riproduzione originale. Un force-stop del pacchetto non garantisce che il sottosistema Wi-Fi di Android abbia rimosso un gruppo esistente. Se un gruppo persiste, reimposta il ricevitore tramite i controlli della TV e verifica il suo stato prima di riprovare.
adb shell am startservice -n com.mediatek.androidbox/.MiracastService --ez screen_share false
Cerca Enter createGroup seguito da createGroup success. Se compare solo Received screen_share tag, l'intent è stato elaborato, ma la creazione del gruppo non è stata dimostrata: verifica i prerequisiti descritti sopra.
adb shell am startservice -n com.mediatek.androidbox/.MiracastService --ez screen_share true