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