OWASP 类别: MASVS-CODE:代码质量
概述
public abstract Context createPackageContext (String packageName, int flags)
当开发者希望在自己的应用中为另一个应用创建上下文时,会使用 createPackageContext
方法。
例如,如果开发者想要从第三方应用获取资源或调用其中的方法,他们将使用 createPackageContext
。
但是,如果应用使用 CONTEXT_IGNORE_SECURITY
和 CONTEXT_INCLUDE_CODE
标记调用 createPackageContext
,然后调用 getClassLoader()
,这会导致应用容易受到恶意应用的代码执行攻击。例如,当攻击者冒充开发者预期存在于用户设备上的未认领的包名(包抢注)时,就会发生这种情况。
总结一下使应用容易受到这种攻击的条件
易受攻击的应用
- 使用
createPackageContext
标记CONTEXT_IGNORE_SECURITY
和CONTEXT_INCLUDE_CODE
进行调用。 - 在检索到的上下文中调用
getClassLoader()
。
恶意应用
- 能够认领易受攻击的应用传递给
createPackageContext
的包名。 - 导出 android:appComponentFactory。
影响
当应用以不安全的方式使用 createPackageContext 时,这会导致恶意应用能够在易受攻击的应用的上下文中获得任意代码执行权限。
缓解措施
除非绝对必要,否则不要使用 CONTEXT_IGNORE_SECURITY
和 CONTEXT_INCLUDE_CODE
标记调用 createPackageContext
。
在无法避免的情况下,请确保实现一种机制来验证您正在执行的包的标识 createPackageContext
(例如,通过验证包的签名)。