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
的套件身分 (例如驗證套件的簽名)。