Categoria OWASP: MASVS-STORAGE: archiviazione
Panoramica
Un FileProvider
configurato in modo errato può esporre involontariamente file e directory a un malintenzionato. A seconda della configurazione, un utente malintenzionato può leggere o scrivere in questi file esposti, il che può comportare l'esfiltrazione di informazioni sensibili o, nel peggiore dei casi, l'esecuzione di codice arbitrario. Ad esempio, un'applicazione con <root-path>
impostato nella configurazione potrebbe consentire a un malintenzionato di accedere a informazioni sensibili memorizzate nei database o di sovrascrivere le librerie native dell'applicazione, con conseguente esecuzione di codice arbitrario.
Impatto
L'impatto varia a seconda della configurazione e dei contenuti dei file, ma in genere porta alla fuga di dati (durante la lettura) o alla sovrascrittura (durante la scrittura) dei file.
Mitigazioni
Non utilizzare l'elemento del percorso <root-path> nella configurazione
<root-path>
corrisponde alla home directory del dispositivo (/
). Se lo consenti nella configurazione, viene fornito l'accesso arbitrario a file e cartelle, inclusa la sandbox e la directory /sdcard
dell'app, il che offre un'ampia superficie di attacco a un malintenzionato.
Condividere intervalli di percorsi stretti
Nel file di configurazione del percorso, evita di condividere un intervallo di percorsi ampio come .
o /
. In questo modo, potresti esporre per errore file sensibili. Condividi solo un intervallo di percorsi limitato/più ristretto e assicurati che solo i file che vuoi condividere si trovino in questo percorso. In questo modo, eviterai di esporre per errore file sensibili.
Un file di configurazione tipico con impostazioni più sicure potrebbe avere il seguente aspetto:
Xml
<paths>
<files-path name="images" path="images/" />
<files-path name="docs" path="docs" />
<cache-path name="cache" path="net-export/" />
</paths>
Controlla e convalida gli URI esterni
Convalida gli URI esterni (utilizzando uno schema content
) e assicurati che non indirizzino ai file locali della tua applicazione. In questo modo si evitano fughe di informazioni involontarie.
Concedi autorizzazioni di accesso minime
Un content URI
può avere autorizzazioni di accesso in lettura e scrittura. Assicurati che venga concessa solo l'autorizzazione di accesso minima richiesta.
Ad esempio, se è richiesta solo l'autorizzazione di lettura, concedi esplicitamente solo FLAG_GRANT_READ_URI_PERMISSION
.
Evita di utilizzare <external-path> per archiviare/condividere informazioni sensibili
I dati sensibili, come le informazioni che consentono l'identificazione personale (PII), non devono essere archiviati al di fuori del contenitore dell'applicazione o delle strutture di archiviazione delle credenziali di sistema. Pertanto, evita di utilizzare l'elemento<external-path>
, a meno che tu non abbia verificato esplicitamente che le informazioni memorizzate/condivise non sono sensibili.