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:
- Memanggil
createPackageContext
denganCONTEXT_IGNORE_SECURITY
danCONTEXT_INCLUDE_CODE
. - Memanggil
getClassLoader()
pada konteks yang diambil.
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
- Dokumentasi createPackageContext
- Postingan blog OverSecured tentang eksekusi kode createPackageContext