
Un PoC para una vulnerabilidad en ZTE File Manager (zte.com.cn.filer) que permite leer archivos arbitrarios de otras aplicaciones con los privilegios de este administrador de archivos.
Un poc para CVE-2026-40000, una vulnerabilidad en ZTE File Manager (zte.com.cn.filer) que permite leer archivos arbitrarios de otras apps con los privilegios de este gestor de archivos
Cómo hacerlo: compila el proyecto (o descarga la app desde releases), instala y abre el poc, luego introduce un archivo para abrir y pulsa el botón Open as zte.com.cn.filer para intentar abrirlo. En el ZTE File Manager selecciona extract all, luego confirma la descompresión, fallará y te pedirá que elijas una app externa para abrirlo (se te permitirá elegir desde el selector de apertura de Android). El ZTE File Manager copiará el archivo a /sdcard/Android/data/zte.com.cn.filer/cache y lo descomprimirá en un subdirectorio temporal. Cuando intentes abrir un archivo con el nombre de uno en el PATH del sistema (o directamente uno en el PATH del sistema) se copiará directamente a /sdcard/Android/data/zte.com.cn.filer/cache y la app preguntará si quieres sobrescribirlo. También hay una forma de reconocer inmediatamente si el archivo a abrir puede o no ser accedido por el ZTE File Manager (asumiendo que la app no tiene permisos para leerlo): en la esquina superior izquierda de FilePreViewActivity y también arriba donde está la flecha de retroceso, cuando es posible abrir el archivo se muestra el nombre del archivo, en cambio cuando la apertura falla no aparece ningún nombre.
Cómo funciona el poc: hace algo como adb shell am start -d content://zte.com.cn.filer.fileprovider/root_path/filetoopen zte.com.cn.filer/zte.com.cn.filer.FilePreViewActivity
La app tiene este 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>
Aunque no esté exportado, puede ser llamado por esta activity
android:name="zte.com.cn.filer.FilePreViewActivity"
android:exported="true"
Dado que estamos llamando al provider desde una de las activities de su propia app, lo de exportado se vuelve inútil. La activity está exportada a true, por lo que puede ser llamada desde otros componentes.
Obviamente esto no es suficiente, la app necesita permitir el acceso a / o al menos a rutas sensibles. Resulta que lo hace (from android:resource="@xml/provider_paths), aunque usa un . apunta a / permitiendo abrir archivos desde cualquier lugar al que la app de archivos tenga acceso
<?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>
Dispositivos afectados: ZTE Blade A75 5G y probablemente modelos nuevos a menos que se actualicen (no los tengo, así que estoy suponiendo). En Android 9 hasta 12 (probablemente en versiones anteriores de Android la situación es la misma) la app carece de zte.com.cn.filer.FilePreViewActivity, por lo que no parece ser vulnerable, o podría ocurrir que la app esté completamente ausente (se usa el gestor de archivos estándar de Google al menos donde lo probé).
No soy responsable del mal uso de esto, la vulnerabilidad es local, obtuvo CVE y por lo tanto está parcheada. Haz actualizaciones del sistema o actualiza tu dispositivo a uno más nuevo en caso de que estés preocupado.