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
的包的身份(例如,通过验证包的签名)。