android – 利用checkCallingOrSelfPermission()进行权限提升攻击

我在Context类中经历了checkCallingOrSelfPermission(),并想知道它是如何被利用的;即,如果某个应用程序触发了被调用者/您的应用程序的方法,该方法调用checkCallingOrSelfPermission(),最后将该权限授予其他应用程序,或者发布否则需要该权限的敏感信息.

这是我通过Java Doc后所理解的:

方法只能由处于被调用者应用程序的同一进程中的任何调用应用程序利用.要进入相同的过程,除了同样的证书签名之外,应用程序还需要在清单文件中具有相同的shareuserid和进程.

因此调用应用程序需要执行以下操作.

>必须知道callee应用程序正在运行的进程和共享用户标识. (我不确定这有多可行?)
>必须使用与被调用者应用程序签署的相同证书进行签名(不太可能假设证书保持安全).

这是checkCallingOrSelfPermission()文档警告的利用方法,还是其他(更现实的)方法可以被利用.

我也查了this post,但答案并不理想.

@R_404_5620@

在正常情况下Binder.callingPid()== Process.myPid()成立.当处理IPC请求时,系统会修改Binder存储的调用PID值,它会将其分配给调用者应用程序的PID.但是,此更改仅影响执行remotelly调用方法的线程,在其他线程中,相等性仍然存在.因此,如果在这一个未受影响的线程中调用checkCallingOrSelfPermission(),它将返回PERMISSION_GRANTED(假设服务应用程序持有该权限)并且可能发生泄漏(或其他圣经后果).

或者,如果在checkCallingOrSelfPermission()之前调用clearCallingIdentity(),则会出现同样的问题,尽管我认为它不太可能发生.

在Nexus 6P,Android 6.0.1(MHC19I)上测试.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...