Insecure File Provider Paths Setting
Configuración de rutas de File Provider insegura
Descripción
La aplicación expone un proveedor de archivos (file provider) utilizando androidx.core.content.FileProvider. El proveedor especifica los archivos disponibles en el atributo secundario de metadatos con el nombre android.support.FILE_PROVIDER_PATHS.
El atributo es necesario para generar la URI para los directorios especificados en el archivo de configuración android.support.FILE_PROVIDER_PATHS.
Android define varios tipos de rutas:
<root-path name="name" path="path"/>
- Al consultar la documentación del FileProvider , no encontrará el
<root-path...>entre las rutas disponibles. Esta ruta, aunque no está documentada, está disponible y se puede utilizar para proporcionar acceso al almacenamiento interno de la aplicación junto con/dataysdcard. Esta ruta otorga acceso a partes protegidas de la aplicación y del dispositivo y, por lo tanto, expone el sistema de archivos de la aplicación.
<files-path name="name" path="path"/>
- Representan archivos en el subdirectorio files/ del área de almacenamiento interno de su aplicación. Este subdirectorio es el mismo que el valor devuelto por
Context.getFilesDir().
<cache-path name="name" path="path"/>
- Representan archivos en el subdirectorio cache del área de almacenamiento interno de su aplicación. La ruta raíz de este subdirectorio es la misma que el valor devuelto por
getCacheDir().
<external-path name="name" path="path"/>
- Representan archivos en la raíz del área de almacenamiento externo. La ruta raíz de este subdirectorio es la misma que el valor devuelto por
Environment.getExternalStorageDirectory().
<external-files-path name="name" path="path"/>
- Representan archivos en la raíz del área de almacenamiento externo de su aplicación. La ruta raíz de este subdirectorio es la misma que el valor devuelto por
Context.getExternalFilesDir(null).
<external-cache-path name="name" path="path"/>
- archivos en la raíz del área de caché externa de su aplicación. La ruta raíz de este subdirectorio es la misma que el valor devuelto por
Context.getExternalCacheDir().
<external-media-path name="name" path="path"/>
- Representan archivos en la raíz del área de medios externos de su aplicación. La ruta raíz de este subdirectorio es la misma que el valor devuelto por el primer resultado de
Context.getExternalMediaDirs().
En el siguiente ejemplo, observamos que el proveedor tiene la configuración de carpeta raíz que nos permite acceder al directorio de inicio (que también incluye el directorio /data y /sdcard).
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<root-path name="root" path="/"/>
</paths>
Intent Redirection para robar datos confidenciales o Remote Code Execution sobrescribiendo bibliotecas nativas.
Recomendación
Un proveedor de rutas de archivos inseguro es una vulnerabilidad en las aplicaciones de Android en la que una ruta de archivo se expone a otras aplicaciones o usuarios, lo que podría comprometer datos confidenciales o permitir el acceso no autorizado a los recursos del sistema.
Para proteger su aplicación de Android contra las vulnerabilidades derivadas de proveedores de rutas de archivos inseguros, tenga en cuenta estas recomendaciones:
- Evite configuraciones permisivas como '.' en declaraciones external-path.
- Evite usar
root-path. - Evite asignar
/como la ruta raíz - Use la etiqueta
<grant-uri-permission>para controlar el acceso a archivos compartidos. - Prefiera usar el tipo de ruta
external-files-path. - Use carpetas específicas para los atributos de ruta:
Por ejemplo, aquí hay un proveedor de archivos de ejemplo con la etiqueta external-files-path y un atributo de ruta específico Download/.
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path
name="downloads"
path="Download/" />
</paths>
Enlaces
Estándares
- OWASP_MASVS_L1:
- MSTG_PLATFORM_4
- OWASP_MASVS_L2:
- MSTG_PLATFORM_4
- CWE_TOP_25:
- CWE_22
- GDPR:
- ART_5
- ART_32
- PCI_STANDARDS:
- REQ_2_2
- REQ_6_2
- REQ_11_3
- OWASP_MASVS_v2_1:
- MASVS_PLATFORM_1
- HIPAA_CONTROLS:
- SECURITY251
- SECURITY221
- SECURITY212
- SECURITY213
- SOC2_CONTROLS:
- CC_2_1
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5