Saltar a contenido

Insecure Filesystem Access

Acceso Inseguro al Sistema de Archivos

Descripción

La aplicación manipula archivos utilizando permisos inseguros (legibles o escribibles por todos) o apunta a dispositivos de memoria externa como una tarjeta SD con permisos débiles.

Según el concepto de diseño de seguridad de Android, los archivos se utilizan solo para la persistencia de la información y se guardan temporalmente (caché), y en principio deben ser privados. El intercambio de información entre aplicaciones no debe ser acceso directo a archivos, sino que debe realizarse a través de un sistema de enlace inter-aplicación, como Content Provider o Service. Al usar esto, se puede lograr el control de acceso inter-aplicación.

Permiso de lectura para todos

Los archivos con permisos de lectura para todos (world readable) pueden presentar un riesgo si almacenan información sensible que pueda comprometerse si una parte no autorizada accede a ella, como un estado de cuenta bancario o un archivo de almacenamiento de claves de sesión.

Permiso de escritura para todos

Los archivos con permisos de escritura para todos (world writable) pueden presentar un riesgo si se utilizan para realizar acciones sensibles, como una lista de URL o parámetros de sesión.

Almacenamiento externo

El acceso al almacenamiento externo en aplicaciones dirigidas a Android 9 (nivel de API 28) y versiones anteriores usando getExternalFilesDir() otorga a otras aplicaciones el derecho de leer y modificar esos archivos.

El método por el cual las aplicaciones acceden a archivos en el almacenamiento externo de dispositivos con Android 10 (nivel de API 29) o superior ha cambiado. Para las aplicaciones dirigidas a Android 10, de forma predeterminada se proporciona una vista filtrada para mostrar archivos en el almacenamiento externo. Cada aplicación puede guardar los archivos de la aplicación en el directorio específico de la aplicación y tiene permanentemente permisos de lectura y escritura para los archivos creados, por lo que no es necesario declarar el permiso.

Recomendación

  • El archivo debe crearse como un archivo privado en principio: Independientemente del contenido de la información a almacenar, los archivos deben configurarse como privados, en principio. Desde el punto de vista del diseño de la seguridad de Android, el intercambio de información y su control de acceso deben realizarse en el sistema Android, como Content Provider y Service, etc., y en caso de que sea imposible, debe considerarse la posibilidad de sustituirlo por el permiso de acceso a archivos como método alternativo.

  • No se deben crear archivos que permitan el acceso de lectura/escritura desde otras aplicaciones: Al permitir que otras aplicaciones lean/escriban archivos, no se puede controlar la información almacenada en ellos. Por lo tanto, no se debe considerar compartir información mediante archivos públicos de lectura/escritura tanto desde el punto de vista de la seguridad como del diseño funcional.

  • El uso de archivos almacenados en dispositivos externos (por ejemplo, tarjeta SD) debe ser el mínimo necesario: Almacenar archivos en dispositivos de memoria externa como tarjetas SD, conlleva problemas potenciales desde el punto de vista funcional y de seguridad.

    • La información sensible no debe guardarse en un archivo de un dispositivo de memoria externa, en principio.
    • En caso de que se guarde información sensible en un archivo de un dispositivo de memoria externa, debe estar cifrada.
    • En caso de guardar en un archivo de un dispositivo de memoria externa información que podría causar problemas si es manipulada por otras aplicaciones o usuarios, debe guardarse con firma electrónica.
    • Al leer archivos en un dispositivo de memoria externa, utilice los datos después de verificar la seguridad de los datos a leer.
    • La aplicación debe estar diseñada suponiendo que los archivos en un dispositivo de memoria externa pueden eliminarse en cualquier momento.
  • El uso de permisos de acceso público debe utilizarse solo cuando sea estrictamente necesario. Se recomiendan otros medios de compartir datos entre aplicaciones en lugar de compartir archivos utilizando permisos inseguros.

  • La aplicación debe diseñarse considerando el alcance del archivo.

Enlaces

Estándares

  • OWASP_MASVS_L1:
    • MSTG_STORAGE_2
  • OWASP_MASVS_L2:
    • MSTG_STORAGE_2
  • CWE_TOP_25:
    • CWE_276
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_6_2
    • REQ_6_3
    • REQ_7_3
    • REQ_11_3
  • OWASP_MASVS_v2_1:
    • MASVS_STORAGE_2
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_4_1
    • CC_6_1
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5
  • HIPAA_CONTROLS:
    • SECURITY221
    • SECURITY212
    • SECURITY213