
Um PoC para uma vulnerabilidade no ZTE File Manager (zte.com.cn.filer) que permite ler arquivos arbitrários de outros aplicativos com os privilégios deste gerenciador de arquivos
Um poc para CVE-2026-40000, uma vulnerabilidade no ZTE File Manager (zte.com.cn.filer) que permite ler arquivos arbitrários de outros apps com os privilégios deste gerenciador de arquivos
Como fazer: compile o projeto (ou obtenha o app em releases), instale e abra o poc, depois insira um arquivo para abrir e pressione o botão Open as zte.com.cn.filer para tentar abri-lo. No ZTE File Manager selecione extract all, depois confirme a descompressão, ela falhará e solicitará que você escolha um app externo para abri-lo (será permitido escolher no seletor de abertura do Android). O ZTE File Manager copiará o arquivo para /sdcard/Android/data/zte.com.cn.filer/cache e o descomprimirá em um subdiretório temporário. Quando você tentar abrir um arquivo com o nome de um no PATH do sistema (ou diretamente um no PATH do sistema), ele será copiado diretamente para /sdcard/Android/data/zte.com.cn.filer/cache e o app perguntará se você deseja sobrescrevê-lo. Há também uma forma de reconhecer imediatamente se o arquivo a ser aberto pode ou não ser acessado pelo ZTE File Manager (assumindo que o app não tenha permissões para lê-lo): na FilePreViewActivity, no canto superior esquerdo e também acima, onde está a seta de voltar, quando é possível abrir o arquivo é mostrado o nome do arquivo; em vez disso, quando a abertura falha, nenhum nome aparece.
Como o poc funciona: ele faz 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
O app possui 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>
Mesmo não sendo exportado, ele pode ser chamado por esta activity
android:name="zte.com.cn.filer.FilePreViewActivity"
android:exported="true"
Como estamos chamando o provider a partir de uma das activities do próprio app, o fato de ser exportado se torna inútil. A activity está exportada como true, então pode ser chamada por outros componentes.
Obviamente isso não é suficiente, o app precisa permitir acesso a / ou pelo menos a caminhos sensíveis. Acontece que ele permite (de android:resource="@xml/provider_paths), mesmo usando um . ele aponta para /, permitindo abrir arquivos de qualquer lugar onde o app de arquivos tenha acesso
<?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 afetados: ZTE Blade A75 5G e modelos novos provavelmente, a menos que atualizados (não os tenho, então estou supondo). No Android 9 até o 12 (provavelmente em versões anteriores do Android a situação é a mesma) o app não possui a zte.com.cn.filer.FilePreViewActivity, então não parece vulnerável, ou pode acontecer de o app estar completamente ausente (o gerenciador de arquivos padrão do Google é usado, pelo menos onde eu testei).
Não me responsabilizo pelo uso indevido disto, a vulnerabilidade é local, recebeu CVE e portanto está corrigida. Faça atualizações do sistema ou atualize seu dispositivo para um mais novo caso esteja preocupado.