OASAM-LEAK-003: Information Leak to SDCard

Descripción
Es posible almacenar información en la tarjeta SD a través de las siguientes funciones:
1. Con la API 7 o menor. A través de las función getExternalStorageDirectory().
2. Con la API 8 o superior. A través de la función getExternalFilesDir()
No es recomendable almacenar información sensible en la tarjeta SD del dispositivo debido a que cualquier aplicación podría obtenerla.
Riesgos
Cualquier aplicación podría tener acceso a la información sensible almacenada en la tarjeta SD.


Recomendaciones
Se recomienda almacenar la información sensible en lugares a los que solo el aplicativo pueda acceder, y preferentemente, cifrar dicha información. 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. http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
2. http://developer.android.com/guide/topics/data/data-storage.html
3. Flaw 1 de “42+ Best parctices in secure mobile development for iOS and Android”
4. Flaw 32 de “42+ Best parctices in secure mobile development for iOS and Android”
5. DRD00-J. Do not store sensitive information on external storage (SD card) - https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=114851866