Insecure File Provider Paths Setting
Paramètre de chemins File Provider non sécurisé
Description
L'application expose un fournisseur de fichiers (file provider) en utilisant androidx.core.content.FileProvider. Le fournisseur spécifie les fichiers disponibles dans l'attribut enfant de métadonnées avec le nom android.support.FILE_PROVIDER_PATHS.
L'attribut est requis pour générer une URI pour les répertoires spécifiés dans le fichier de configuration android.support.FILE_PROVIDER_PATHS.
Android définit plusieurs types de chemins :
<root-path name="name" path="path"/>
- En consultant la documentation du FileProvider , vous ne trouverez pas le
<root-path...>parmi les chemins disponibles. Ce chemin, bien que non documenté, est disponible et peut être utilisé pour fournir un accès au stockage interne de l'application avec/dataetsdcard. Ce chemin accorde l'accès aux parties protégées de l'application et de l'appareil et expose ainsi le système de fichiers de l'application.
<files-path name="name" path="path"/>
- Représente les fichiers dans le sous-répertoire files/ de la zone de stockage interne de votre application. Ce sous-répertoire est identique à la valeur renvoyée par
Context.getFilesDir().
<cache-path name="name" path="path"/>
- Représente les fichiers dans le sous-répertoire cache de la zone de stockage interne de votre application. Le chemin racine de ce sous-répertoire est identique à la valeur renvoyée par
getCacheDir().
<external-path name="name" path="path"/>
- Représente les fichiers à la racine de la zone de stockage externe. Le chemin racine de ce sous-répertoire est identique à la valeur renvoyée par
Environment.getExternalStorageDirectory().
<external-files-path name="name" path="path"/>
- Représente les fichiers à la racine de la zone de stockage externe de votre application. Le chemin racine de ce sous-répertoire est identique à la valeur renvoyée par
Context.getExternalFilesDir(null).
<external-cache-path name="name" path="path"/>
- fichiers à la racine de la zone de cache externe de votre application. Le chemin racine de ce sous-répertoire est identique à la valeur renvoyée par
Context.getExternalCacheDir().
<external-media-path name="name" path="path"/>
- Représente les fichiers à la racine de la zone de médias externes de votre application. Le chemin racine de ce sous-répertoire est identique à la valeur renvoyée par le premier résultat de
Context.getExternalMediaDirs().
Dans l'exemple ci-dessous, nous observons que le fournisseur a la configuration de dossier racine qui nous permet d'accéder au répertoire personnel (qui inclut également le répertoire /data et /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 pour voler des données sensibles ou Remote Code Execution en écrasant des bibliothèques natives.
Recommandation
Un chemin de fichier de fournisseur non sécurisé est une vulnérabilité dans les applications Android où un chemin de fichier est exposé à d'autres applications ou utilisateurs, ce qui pourrait potentiellement compromettre des données sensibles ou permettre un accès non autorisé aux ressources du système.
Pour protéger votre application Android contre les vulnérabilités découlant de fournisseurs de chemins de fichiers non sécurisés, tenez compte des recommandations suivantes :
- Évitez les paramètres permissifs comme '.' dans les déclarations external-path.
- Évitez d'utiliser
root-path. - Évitez d'attribuer
/comme chemin racine - Utilisez la balise
<grant-uri-permission>pour contrôler l'accès aux fichiers partagés. - Préférez utiliser le type de chemin
external-files-path. - Utilisez des dossiers spécifiques pour les attributs de chemin :
Par exemple, voici un exemple de fournisseur de fichiers avec la balise external-files-path et l'attribut de chemin spécifique Download/.
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path
name="downloads"
path="Download/" />
</paths>
Liens
Normes
- 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