Content Provider文件目录遍历漏洞 - openFile方法 一、API 1. ContentProvider.openFile(Uri uri, String mode) 2. 第一参数:指向被打开的目标文件 3. 第二参数:文件的访问模式 r 表示只读(read-only) rw 表示读写(read and write) rwt 表示读写防删除 参考链接:http://blog.csdn.net/fly542/article/details/7108037 4. 参考链接 https://developer.xamarin.com/api/member/Android.Content.ContentProvider.OpenFile/p/Android.Net.Uri/System.String/ 二、触发条件 1. 对外暴露的content provider组件 参考链接:http://blog.csdn.net/u013107656/article/details/51862737 2. 实现了openFile()接口 【1】对应到smali语句中的特征: .method public openFile(Landroid/net/Uri;Ljava/lang/String;) 三、漏洞原理 【1】对外暴露的Content Provider组件实现了openFile()接口,并且没有对Content Provider组件的访问进行权限控制,也没有对访问的目标文件的Uri进行有效判断,第三方应用程序可以利用该接口进行文件目录遍历,访问任意可读文件 【2】详细的原理&POC https://jaq.alibaba.com/community/art/show?spm=a313e.7916646.24000001.14.YTCZiR&articleid=61 http://drops.wooyun.org/mobile/16382 四、修复建议 【1】将不必要导出的Content Provider组件设置为不导出(android:exported="false") 【2】移除没有必要的openFile()接口 【3】对访问的目标文件的路径进行有效判断