Aller au contenu

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 /data et sdcard. 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>
Cette mauvaise configuration peut être chaînée avec d'autres vulnérabilités telles que 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