
Un PoC per una vulnerabilità in ZTE File Manager (zte.com.cn.filer) che consente di leggere file arbitrari da altre app con i privilegi di questo file manager
Un poc per CVE-2026-40000, una vulnerabilità in ZTE File Manager (zte.com.cn.filer) che consente di leggere file arbitrari da altre app con i privilegi di questo file manager
Come fare: compilare il progetto (o scaricare l'app dalle releases), installare e aprire il poc, quindi inserire un file da aprire e premere il pulsante Open as zte.com.cn.filer per provare ad aprirlo. Su ZTE File Manager selezionare extract all, poi confermare la decompressione: fallirà e vi chiederà di scegliere un'app esterna per aprirlo (vi sarà consentito scegliere dal picker di Android). ZTE File Manager copierà il file in /sdcard/Android/data/zte.com.cn.filer/cache e lo decomprimerà in una sottodirectory temporanea. Quando proverete ad aprire un file con il nome di uno presente nel PATH di sistema (o direttamente uno nel PATH di sistema) verrà copiato direttamente in /sdcard/Android/data/zte.com.cn.filer/cache e l'app chiederà se volete sovrascriverlo. C'è anche un modo per riconoscere immediatamente se il file da aprire può o non può essere accessibile da ZTE File Manager (presumendo che l'app non abbia i permessi per leggerlo): nella FilePreViewActivity nell'angolo in alto a sinistra e anche in alto dove c'è la freccia indietro, quando è possibile aprire il file viene mostrato il nome del file, mentre quando l'apertura fallisce non appare alcun nome.
Come funziona il poc: fa qualcosa come adb shell am start -d content://zte.com.cn.filer.fileprovider/root_path/filetoopen zte.com.cn.filer/zte.com.cn.filer.FilePreViewActivity
L'app ha questo provider
<provider
android:name="androidx.core.content.FileProvider"
android:exported="false"
android:authorities="zte.com.cn.filer.fileprovider"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
Anche se non è esportato può essere chiamato da questa activity
android:name="zte.com.cn.filer.FilePreViewActivity"
android:exported="true"
Poiché stiamo chiamando il provider da una delle activity della sua stessa app, il fatto che sia esportato diventa inutile. L'activity è esportata a true quindi può essere chiamata da altri componenti.
Ovviamente questo non basta, l'app deve consentire l'accesso a / o almeno a percorsi sensibili. A quanto pare lo fa (da android:resource="@xml/provider_paths), anche se usa un . punta a / consentendo di aprire file da qualsiasi posizione a cui l'app file ha accesso
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path
name="files-path"
path="."/>
<external-path
name="external_files"
path="."/>
<root-path
name="root_path"
path="."/>
<external-cache-path
name="external_cache_path"
path="."/>
</paths>
Dispositivi interessati: ZTE Blade A75 5G e probabilmente i nuovi modelli, a meno che non siano aggiornati (non li ho, quindi sto ipotizzando). Su Android dal 9 al 12 (probabilmente sulle versioni precedenti di Android la situazione è la stessa) l'app manca di zte.com.cn.filer.FilePreViewActivity quindi non sembra vulnerabile, oppure potrebbe accadere che l'app sia completamente assente (almeno dove ho provato viene usato il file manager stock di Google).
Non sono responsabile per un uso improprio di questo, la vulnerabilità è locale, ha ottenuto un CVE ed è quindi corretta. Fate gli aggiornamenti di sistema o passate a un dispositivo più recente nel caso siate preoccupati.