Categoría de OWASP: MASVS-STORAGE: Almacenamiento
Descripción general
Un FileProvider
configurado de manera incorrecta puede exponer, de manera involuntaria, archivos y directorios a un atacante. Según la configuración, un atacante puede leer estos archivos expuestos o escribir en ellos, lo que a su vez puede llevar a la exfiltración de información sensible o, en el peor de los casos, la ejecución arbitraria de código. Por ejemplo, una aplicación con un <root-path>
que se estableció en la configuración podría permitir que un atacante acceda a información sensible almacenada en bases de datos, o bien reemplace las bibliotecas nativas de la aplicación, lo que generaría una ejecución de código arbitraria.
Impacto
El impacto varía según la configuración y el contenido del archivo, pero suele provocar la filtración de datos (cuando se leen los archivos) o el reemplazo de datos (cuando se escriben los archivos).
Mitigaciones
No uses el elemento de la ruta de acceso <root-path> en la configuración
<root-path>
corresponde al directorio raíz del dispositivo (/
). Si permites este elemento en la configuración, se proporciona acceso arbitrario a los archivos y las carpetas, incluida la zona de pruebas de la app y el directorio /sdcard
, que ofrece una superficie de ataque muy amplia a un atacante.
Comparte rangos acotados de rutas de acceso
En el archivo de configuración de la ruta de acceso, evita compartir un rango amplio de rutas, como .
o /
. Si lo haces, es posible que se expongan archivos sensibles por error. Comparte solo un rango de ruta limitado o más acotado y asegúrate de que solo los archivos que desees compartir estén en esta ruta de acceso. Esto evitará exponer los archivos sensibles por error.
Un archivo de configuración típico con opciones de configuración más seguras podría verse así:
XML
<paths>
<files-path name="images" path="images/" />
<files-path name="docs" path="docs" />
<cache-path name="cache" path="net-export/" />
</paths>
Verifica y valida los URIs externos
Valida los URIs externos (con un esquema content
) y asegúrate de que no apunten a los archivos locales de tu aplicación. Esto evita cualquier filtración de información involuntaria.
Otorga permisos de acceso mínimos
Un content URI
puede tener permisos de acceso de lectura y escritura. Asegúrate de que solo se otorgue el permiso de acceso mínimo requerido.
Por ejemplo, si solo se requiere permiso de lectura, otorga solo FLAG_GRANT_READ_URI_PERMISSION
de manera explícita.
Evita el uso de <external-path> para almacenar o compartir información sensible
Los datos sensibles, como la información de identificación personal (PII), no se deben almacenar fuera del contenedor de la aplicación ni las instalaciones de almacenamiento de credenciales del sistema. Por lo tanto, evita el uso del elemento <external-path>
, a menos que hayas verificado de forma explícita que la información que se almacena o comparte no es sensible.