Content Provider组件暴露 - exported属性
一、android:exported
该属性指示了content provider是否可以被其他应用程序使用
1. true
代表该content provider可以被其他应用程序使用,其他所有的应用程序都可以通过该content provider提供的URI访问由该content provider提供的数据,在访问的时候,只需要遵循相应的权限就行
2. false
代表该content provider对其他应用程序来说是不可见的,将android:exported设置为false,用于限制其他应用程序来访问由该content provider提供的数据,只有当应用程序的UID和该content provider的UID相同时,才可以访问
3. 默认值
当minSdkVersion或者targetSdkVersion小于16时该属性的默认值是true;当大于17时,该属性默认值为false
4. 权限控制
【1】可以通过设置该属性的值为false或者通过访问权限来控制该content provider是否可以被其他应用程序使用
【2】android:permission 指定读写该content provider数据的权限名称
5. 参考链接
http://blog.csdn.net/peng_cao/article/details/50747694#androidexported
二、触发条件
1. 定位AndroidManifest.xml文件中的content provider组件
【1】对应的特征:<provider
2. exported属性的判断
【1】android:permission 如果设置权限控制,就认为不存在安全风险
【2】android:exported="true" 未设置权限控制的情况下,exported属性设置为true (默认也是true)
三、漏洞原理
【1】导出的Content Provider组件可以被第三方app任意调用,导致敏感信息泄露,并可能受到目录遍历、SQL注入等攻击风险
【2】详细的原理&POC
http://www.droidsec.cn/android-content-provider-security/
四、修复建议
【1】如果应用的Content Provider组件不必要导出,建议显式设置组件的“android:exported”属性为false
【2】如果必须要有数据提供给外部应用使用,建议对组件进行权限控制
转自:
http://blog.csdn.net/u013107656/article/details/51862737