跳转至

Insecure File Provider Paths Setting

不安全的 File Provider 路径设置

描述

该应用程序使用 androidx.core.content.FileProvider 暴露了一个文件提供程序(file provider)。该提供程序在名称为 android.support.FILE_PROVIDER_PATHS 的元数据子属性中指定了可用文件。

此属性是将 android.support.FILE_PROVIDER_PATHS 配置文件中指定的目录生成 URI 所必需的。

Android 定义了多种路径类型:

<root-path name="name" path="path"/>
  • 查看 FileProvider 的文档,您不会在可用路径中找到 <root-path...>。 此路径虽然没有记录,但却是可用的,并且可以用于提供对应用程序内部存储以及 /datasdcard 的访问。 此路径授予对应用程序和设备受保护部分的访问权限,从而暴露了应用程序文件系统。
<files-path name="name" path="path"/>
  • 表示应用程序内部存储区域的 files/ 子目录中的文件。此子目录与 Context.getFilesDir() 返回的值相同。
<cache-path name="name" path="path"/>
  • 表示应用程序内部存储区域的 cache 子目录中的文件。此子目录的根路径与 getCacheDir() 返回的值相同。
<external-path name="name" path="path"/>
  • 表示外部存储区域根目录中的文件。此子目录的根路径与 Environment.getExternalStorageDirectory() 返回的值相同。
<external-files-path name="name" path="path"/>
  • 表示应用程序外部存储区域根目录中的文件。此子目录的根路径与 Context.getExternalFilesDir(null) 返回的值相同。
<external-cache-path name="name" path="path"/>
  • 应用程序外部缓存区域根目录中的文件。此子目录的根路径与 Context.getExternalCacheDir() 返回的值相同。
<external-media-path name="name" path="path"/>
  • 表示应用程序外部媒体区域根目录中的文件。此子目录的根路径与 Context.getExternalMediaDirs() 的第一个结果返回的值相同。

在下面的示例中,我们观察到该提供程序具有允许我们访问主目录(还包括 /data 和 /sdcard 目录)的根文件夹配置。

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <root-path name="root" path="/"/>
</paths>
这种错误配置可以与其他漏洞(如 Intent Redirection)链接起来,以窃取敏感数据,或者通过覆盖本地库导致 Remote Code Execution

建议

不安全的文件路径提供程序是 Android 应用程序中的一个漏洞,其中文件路径暴露给其他应用程序或用户,这可能会危及敏感数据或允许对系统资源进行未经授权的访问。

要保护您的 Android 应用程序免受因不安全文件路径提供程序而产生的漏洞的影响,请考虑以下建议:

  • 避免在 external-path 声明中使用类似 '.' 的宽松设置。
  • 避免使用 root-path
  • 避免将 / 分配为根路径。
  • 使用 <grant-uri-permission> 标签来控制对共享文件的访问。
  • 优先使用 external-files-path 路径类型。
  • 对路径属性使用特定的文件夹:

例如,以下是一个带有 external-files-path 标签和特定 Download/ 路径属性的示例文件提供程序。

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-files-path
        name="downloads"
        path="Download/" />
</paths>

链接

标准

  • OWASP_MASVS_L1:
    • MSTG_PLATFORM_4
  • OWASP_MASVS_L2:
    • MSTG_PLATFORM_4
  • CWE_TOP_25:
    • CWE_22
  • GDPR:
    • ART_5
    • ART_32
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_6_2
    • REQ_11_3
  • OWASP_MASVS_v2_1:
    • MASVS_PLATFORM_1
  • HIPAA_CONTROLS:
    • SECURITY251
    • SECURITY221
    • SECURITY212
    • SECURITY213
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_4_1
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5