OASAM-CONF-006: Improper file permissions

Descripción
La generación de ficheros con el permiso “MODE_WORLD_READABLE” permite la lectura global del fichero, por lo que no se recomienda su uso salvo que sea un fichero que no exponga información sensible. De la misma manera, se recomienda evitar cuando sea posible establecer a ficheros el permiso “MODE_WORLD_WRITABLE”. A continuación podemos ver un ejemplo de declaración de fichero peligrosa:
file = openFileOutput("File_Name", Context.MODE_WORLD_READABLE);
Riesgos
Establecer permisos de lectura global expone la información contenida en un fichero. Si se le proporciona el permiso de escritura, cualquier aplicación podría modificar el contenido de dicho fichero, aumentando la superficie de ataque.
 

Recomendaciones
Se recomienda crear ficheros con permisos de lectura o escritura global solo en el caso de ser estrictamente necesario. En general, para almacenar datos, se deben seguir las siguientes directivas:
1. Shared Preferences. Para almacenar opciones en forma de pares de valores
2. Internal Storage. Para almacenar datos en la memoria del dispositivo, por defecto este tipo de almacenamiento no es accesible a terceras aplicaciones
3. External Storage. Para almacenar datos en sitios compartidos por todas las aplicaciones del dispositivo, como las tarjetas SD.
4. SQLite Database. Para almacenar datos en BBDD SQLite. Por defecto este tipo de bases de datos no son accesibles a terceras aplicaciones.
5. Network Connection. Para almacenar datos en servicios a través de la red. En estos casos se recomienda extremar las precauciones y utilizar métodos de cifrado.

Referencias
1. Flaw 20 de “42+ Best parctices in secure mobile development for iOS and Android”
2. Pag 22 de “iSEC Securing Android Apps”
3. DRD11-J. Ensure that sensitive data is kept secure - https://www.securecoding.cert.org/confluence/display/java/DRD11-J.+Ensure+that+sensitive+data+is+kept+secure