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...>。 此路径虽然没有记录,但却是可用的,并且可以用于提供对应用程序内部存储以及/data和sdcard的访问。 此路径授予对应用程序和设备受保护部分的访问权限,从而暴露了应用程序文件系统。
<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