createPackageContext
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Kategori OWASP: MASVS-CODE: Kualitas Kode
Ringkasan
public abstract Context createPackageContext (String packageName, int flags)
Metode createPackageContext
digunakan saat developer ingin membuat
konteks untuk aplikasi lain di aplikasinya sendiri.
Misalnya, jika developer ingin mendapatkan resource dari aplikasi pihak ketiga atau
memanggil metode dari aplikasi tersebut, mereka akan menggunakan createPackageContext
.
Namun, jika aplikasi memanggil createPackageContext
dengan flag
CONTEXT_IGNORE_SECURITY
dan CONTEXT_INCLUDE_CODE
, lalu
memanggil getClassLoader()
, hal ini dapat menyebabkan aplikasi
rentan terhadap eksekusi kode oleh aplikasi berbahaya. Hal ini dapat terjadi, misalnya, saat penyerang meniru nama paket yang tidak diklaim (squatting
paket) yang diharapkan developer akan ada di perangkat pengguna.
Untuk meringkas kriteria yang harus dipenuhi agar aplikasi rentan
terhadap serangan semacam ini:
Aplikasi Rentan:
Aplikasi Berbahaya:
- Dapat mengklaim nama paket yang diteruskan aplikasi yang rentan ke
createPackageContext
.
- Mengekspor android:appComponentFactory.
Dampak
Jika createPackageContext digunakan dengan cara yang tidak aman oleh aplikasi, hal ini dapat
menyebabkan aplikasi berbahaya dapat memperoleh eksekusi kode arbitrer dalam
konteks aplikasi yang rentan.
Mitigasi
Jangan memanggil createPackageContext
dengan
CONTEXT_IGNORE_SECURITY
dan CONTEXT_INCLUDE_CODE
kecuali jika benar-benar diperlukan.
Jika hal ini tidak dapat dihindari, pastikan untuk menerapkan mekanisme guna memverifikasi
identitas paket tempat Anda mengeksekusi createPackageContext
(misalnya, dengan memverifikasi tanda tangan paket).
Referensi
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-07-26 UTC.
[null,null,["Terakhir diperbarui pada 2025-07-26 UTC."],[],[],null,["# createPackageContext\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\n public abstract Context createPackageContext (String packageName, int flags)\n\nThe method [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) is used when a developer wants to create\na context for another application in their own application.\n\nFor example, if developers want to get resources from a 3rd-party application or\ncall methods from it, they would use `createPackageContext`.\n\nHowever, if an application calls `createPackageContext` with the\n[`CONTEXT_IGNORE_SECURITY`](/reference/android/content/Context#CONTEXT_IGNORE_SECURITY) and [`CONTEXT_INCLUDE_CODE`](/reference/android/content/Context#CONTEXT_INCLUDE_CODE) flags, and then\ncalls [`getClassLoader()`](/reference/android/content/Context#getClassLoader()), this could result in making the application\nvulnerable to code execution by a malicious application. This can occur, for\nexample, when an attacker impersonates an unclaimed package name (package\nsquatting) that the developer had expected to be present on the user's device.\n\nTo summarize the criteria that have to be met to make an application vulnerable\nto this kind of attack:\n\nVulnerable App:\n\n- Calls [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) with [`CONTEXT_IGNORE_SECURITY`](/reference/android/content/Context#CONTEXT_IGNORE_SECURITY) and [`CONTEXT_INCLUDE_CODE`](/reference/android/content/Context#CONTEXT_INCLUDE_CODE).\n- Calls [`getClassLoader()`](/reference/android/content/Context#getClassLoader()) on the retrieved context.\n\nMalicious App:\n\n- Is able to claim the package name that the vulnerable app passes to [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)).\n- Exports android:appComponentFactory.\n\nImpact\n------\n\nWhen createPackageContext is used in an insecure way by an application, this can\nlead to a malicious application being able to gain arbitrary code execution in\nthe context of the vulnerable application.\n\nMitigations\n-----------\n\nDon't call [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) with\n[`CONTEXT_IGNORE_SECURITY`](/reference/android/content/Context#CONTEXT_IGNORE_SECURITY) and [`CONTEXT_INCLUDE_CODE`](/reference/android/content/Context#CONTEXT_INCLUDE_CODE) unless absolutely necessary.\n\nIn cases where this is unavoidable, make sure to implement a mechanism to verify\nthe identity of the package you are executing [`createPackageContext`](/reference/android/content/Context#createPackageContext(java.lang.String,%20int)) on (e.g. by verifying the package's signature).\n\nResources\n---------\n\n- [createPackageContext Documentation](/reference/android/content/Context#createPackageContext(java.lang.String,%20int))\n- [OverSecured blog post on createPackageContext code execution](https://blog.oversecured.com/Android-arbitrary-code-execution-via-third-party-package-contexts)"]]