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 を実行するパッケージの ID を確認するメカニズムを実装してください(パッケージの署名の検証など)。