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