Directory non esposte a FileProvider

Categoria OWASP: MASVS-STORAGE: Storage

Panoramica

Un FileProvider configurato in modo non corretto può esporre involontariamente file e directory a un malintenzionato. A seconda della configurazione, un attaccante 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, portando all'esecuzione di codice arbitrario.

Impatto

L'impatto varia a seconda della configurazione e del contenuto del file, ma in genere comporta la perdita di dati (durante la lettura) o la sovrascrittura (durante la scrittura) dei file.

Mitigazioni

Non utilizzare l'elemento di percorso <root-path> nella configurazione

<root-path> corrisponde alla directory principale del dispositivo (/). Se questa opzione è consentita nella configurazione, viene fornito l'accesso arbitrario a file e cartelle, inclusi il sandbox dell'app e la directory /sdcard, che offre una superficie di attacco molto ampia a un malintenzionato.

Condividere intervalli di percorso ristretti

Nel file di configurazione del percorso, evita di condividere un intervallo di percorso ampio come . o /. In questo modo, potresti esporre file sensibili per errore. 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, si evita di esporre per errore file sensibili.

Un tipico file di configurazione 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 puntino ai file locali dell'applicazione. In questo modo, si evita qualsiasi divulgazione involontaria di informazioni.

Concedere autorizzazioni di accesso minime

Un content URI può disporre delle autorizzazioni di accesso sia in lettura che in 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 l'utilizzo di <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 degli archivi credenziali di sistema. Pertanto, evita l'utilizzo dell'elemento<external-path>, a meno che tu non abbia verificato esplicitamente che le informazioni archiviate/condivise non siano sensibili.

Risorse