内容提供程序中缺少读写权限¶
ID: java/android/incomplete-provider-permissions
Kind: problem
Security severity: 8.2
Severity: warning
Precision: medium
Tags:
- security
- external/cwe/cwe-926
Query suites:
- java-security-extended.qls
- java-security-and-quality.qls
Android 清单文件使用 provider
元素为应用程序指定内容提供程序。 provider
元素指定应用程序使用该提供程序访问资源所需的显式权限。您可以使用 android:readPermission
、android:writePermission
或 android:permission
属性指定权限。如果您未指定执行操作所需的权限,应用程序将隐式拥有执行该操作的权限。例如,如果您仅指定 android:readPermission
,则应用程序必须拥有读取数据的显式权限,但不需要写入数据的权限。
建议¶
为防止权限绕过,您应创建同时指定 android:readPermission
和 android:writePermission
属性,或指定 android:permission
属性的 provider
元素。
示例¶
在以下两个(错误)示例中,提供程序仅配置了读取或写入权限。这允许恶意应用程序通过请求访问不受限制的操作来绕过权限检查。
<manifest ... >
<application ...>
<!-- BAD: only 'android:readPermission' is set -->
<provider
android:name=".MyContentProvider"
android:authorities="table"
android:enabled="true"
android:exported="true"
android:readPermission="android.permission.MANAGE_DOCUMENTS">
</provider>
</application>
</manifest>
<manifest ... >
<application ...>
<!-- BAD: only 'android:writePermission' is set -->
<provider
android:name=".MyContentProvider"
android:authorities="table"
android:enabled="true"
android:exported="true"
android:writePermission="android.permission.MANAGE_DOCUMENTS">
</provider>
</application>
</manifest>
在以下(正确)示例中,提供程序配置了完全权限,保护其免受权限绕过。
<manifest ... >
<application ...>
<!-- Good: both 'android:readPermission' and 'android:writePermission' are set -->
<provider
android:name=".MyContentProvider"
android:authorities="table"
android:enabled="true"
android:exported="true"
android:writePermission="android.permission.MANAGE_DOCUMENTS"
android:readPermission="android.permission.MANAGE_DOCUMENTS">
</provider>
</application>
</manifest>
<manifest ... >
<application ...>
<!-- Good: 'android:permission' is set -->
<provider
android:name=".MyContentProvider"
android:authorities="table"
android:enabled="true"
android:exported="true"
android:permission="android.permission.MANAGE_DOCUMENTS">
</provider>
</application>
</manifest>
参考¶
Android 文档:Provider 元素
CVE-2021-41166:Nextcloud Android 应用程序中的权限控制不足
GitHub 安全实验室研究:Nextcloud Android 应用程序中的权限控制不足
常见弱点枚举:CWE-926.