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